Block patches for 2.0 (flushing block-next)

-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.15 (GNU/Linux)
 
 iQIcBAABAgAGBQJSmMQmAAoJEH8JsnLIjy/WRmkP/1t239Y2Tjk+/wyR//W2YyD1
 hiCnQdDb6SLamP6EnnA+jMik1vv9dRtZZ+eKYIIuEfRK8lv+AG1l0B+loBg6VTm2
 3elpeo+MThEj/+ryMXlBky2NWS6t6k6ovEzJw11qaAvkJvXmetZV0I+wBzUj4DbT
 oDAoqmWlsFkN5dpHRlUseqscab/FvAb+KCQqKNrk9441Bi3Le4bq5iyfaioObqU1
 CtnF5facaPcKIpTdJdhk6Y2EWnhy1JlSggKroordqX1/3TE9NYpYG/7ejNmfqkLn
 OoKPasZKF2iVAOBfwsODI1PFisKT48ceHEddSSqjcf64HitWeCYJAc8qSO7hggD6
 TOzF01d5NLN+Ox+12xFUyeVI42N7Up2JP86oCXPtBC8T/ij6H81QNuKtzUmRmHeF
 cUJCU0pm45lwDDWjueUjfyb483yqFsV31ddZTXEahN8leAeimR4MNz5iFzINsGN1
 c2v/Wht5+chuDlgExFcOK1W3AUEZXblH0nv5jc8caEmX7l6MTPGYUBNOjPs9MhwZ
 r3cDvUjIe9j6LR49N5iAekw+roW3cBD4NlobyvGXZNMvNtdVcGezvLOwFzPiT7Fk
 rGZteBb1Bo68Wa0P9X7tdw7JHrUAP8yi/fE3MFVkVnofq644/DYeRdlznGqbo2Xw
 0LWz6ViBQeLW1vm4LSMp
 =uEdP
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'kwolf/tags/for-anthony' into staging

Block patches for 2.0 (flushing block-next)

# gpg: Signature made Fri 29 Nov 2013 08:43:18 AM PST using RSA key ID C88F2FD6
# gpg: Can't check signature: public key not found

# By Peter Lieven (17) and others
# Via Kevin Wolf
* kwolf/tags/for-anthony: (41 commits)
  qemu-iotests: Add sample image and test for VMDK version 3
  vmdk: Allow read only open of VMDK version 3
  qemu-iotests: Filter out 'qemu-io> ' prompt
  qemu-iotests: Filter qemu-io output in 025
  block: Use BDRV_O_NO_BACKING where appropriate
  qemu-iotests: Test snapshot mode
  block: Enable BDRV_O_SNAPSHOT with driver-specific options
  qemu-iotests: Make test case 030, 040 and 055 deterministic
  qemu-iotest: Add pause_drive and resume_drive methods
  blkdebug: add "remove_break" command
  qemu-iotests: Drop local version of cancel_and_wait from 040
  sheepdog: support user-defined redundancy option
  sheepdog: refactor do_sd_create()
  qdict: Optimise qdict_do_flatten()
  qdict: Fix memory leak in qdict_do_flatten()
  MAINTAINERS: add sheepdog development mailing list
  COW: Extend checking allocated bits to beyond one sector
  COW: Speed up writes
  qapi: Change BlockDirtyInfo to list
  block: per caller dirty bitmap
  ...

Message-id: 1385743555-27888-1-git-send-email-kwolf@redhat.com
Signed-off-by: Anthony Liguori <aliguori@amazon.com>
This commit is contained in:
Anthony Liguori 2013-12-06 12:59:58 -08:00
commit 0a0ee0b93b
54 changed files with 76520 additions and 75850 deletions

View File

@ -879,6 +879,7 @@ F: block/rbd.c
Sheepdog Sheepdog
M: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp> M: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
M: Liu Yuan <namei.unix@gmail.com> M: Liu Yuan <namei.unix@gmail.com>
L: sheepdog@lists.wpkg.org
S: Supported S: Supported
F: block/sheepdog.c F: block/sheepdog.c

View File

@ -58,6 +58,7 @@ typedef struct BlkMigDevState {
/* Protected by block migration lock. */ /* Protected by block migration lock. */
unsigned long *aio_bitmap; unsigned long *aio_bitmap;
int64_t completed_sectors; int64_t completed_sectors;
BdrvDirtyBitmap *dirty_bitmap;
} BlkMigDevState; } BlkMigDevState;
typedef struct BlkMigBlock { typedef struct BlkMigBlock {
@ -309,12 +310,21 @@ static int mig_save_device_bulk(QEMUFile *f, BlkMigDevState *bmds)
/* Called with iothread lock taken. */ /* Called with iothread lock taken. */
static void set_dirty_tracking(int enable) static void set_dirty_tracking(void)
{ {
BlkMigDevState *bmds; BlkMigDevState *bmds;
QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) { QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) {
bdrv_set_dirty_tracking(bmds->bs, enable ? BLOCK_SIZE : 0); bmds->dirty_bitmap = bdrv_create_dirty_bitmap(bmds->bs, BLOCK_SIZE);
}
}
static void unset_dirty_tracking(void)
{
BlkMigDevState *bmds;
QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) {
bdrv_release_dirty_bitmap(bmds->bs, bmds->dirty_bitmap);
} }
} }
@ -432,7 +442,7 @@ static int mig_save_device_dirty(QEMUFile *f, BlkMigDevState *bmds,
} else { } else {
blk_mig_unlock(); blk_mig_unlock();
} }
if (bdrv_get_dirty(bmds->bs, sector)) { if (bdrv_get_dirty(bmds->bs, bmds->dirty_bitmap, sector)) {
if (total_sectors - sector < BDRV_SECTORS_PER_DIRTY_CHUNK) { if (total_sectors - sector < BDRV_SECTORS_PER_DIRTY_CHUNK) {
nr_sectors = total_sectors - sector; nr_sectors = total_sectors - sector;
@ -554,7 +564,7 @@ static int64_t get_remaining_dirty(void)
int64_t dirty = 0; int64_t dirty = 0;
QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) { QSIMPLEQ_FOREACH(bmds, &block_mig_state.bmds_list, entry) {
dirty += bdrv_get_dirty_count(bmds->bs); dirty += bdrv_get_dirty_count(bmds->bs, bmds->dirty_bitmap);
} }
return dirty << BDRV_SECTOR_BITS; return dirty << BDRV_SECTOR_BITS;
@ -569,7 +579,7 @@ static void blk_mig_cleanup(void)
bdrv_drain_all(); bdrv_drain_all();
set_dirty_tracking(0); unset_dirty_tracking();
blk_mig_lock(); blk_mig_lock();
while ((bmds = QSIMPLEQ_FIRST(&block_mig_state.bmds_list)) != NULL) { while ((bmds = QSIMPLEQ_FIRST(&block_mig_state.bmds_list)) != NULL) {
@ -604,7 +614,7 @@ static int block_save_setup(QEMUFile *f, void *opaque)
init_blk_migration(f); init_blk_migration(f);
/* start track dirty blocks */ /* start track dirty blocks */
set_dirty_tracking(1); set_dirty_tracking();
qemu_mutex_unlock_iothread(); qemu_mutex_unlock_iothread();
ret = flush_blks(f); ret = flush_blks(f);
@ -780,7 +790,8 @@ static int block_load(QEMUFile *f, void *opaque, int version_id)
} }
if (flags & BLK_MIG_FLAG_ZERO_BLOCK) { if (flags & BLK_MIG_FLAG_ZERO_BLOCK) {
ret = bdrv_write_zeroes(bs, addr, nr_sectors); ret = bdrv_write_zeroes(bs, addr, nr_sectors,
BDRV_REQ_MAY_UNMAP);
} else { } else {
buf = g_malloc(BLOCK_SIZE); buf = g_malloc(BLOCK_SIZE);
qemu_get_buffer(f, buf, BLOCK_SIZE); qemu_get_buffer(f, buf, BLOCK_SIZE);

358
block.c
View File

@ -49,12 +49,12 @@
#include <windows.h> #include <windows.h>
#endif #endif
#define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */ struct BdrvDirtyBitmap {
HBitmap *bitmap;
QLIST_ENTRY(BdrvDirtyBitmap) list;
};
typedef enum { #define NOT_DONE 0x7fffffff /* used while emulated sync operation in progress */
BDRV_REQ_COPY_ON_READ = 0x1,
BDRV_REQ_ZERO_WRITE = 0x2,
} BdrvRequestFlags;
static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load); static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load);
static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs, static BlockDriverAIOCB *bdrv_aio_readv_em(BlockDriverState *bs,
@ -84,7 +84,7 @@ static BlockDriverAIOCB *bdrv_co_aio_rw_vector(BlockDriverState *bs,
bool is_write); bool is_write);
static void coroutine_fn bdrv_co_do_rw(void *opaque); static void coroutine_fn bdrv_co_do_rw(void *opaque);
static int coroutine_fn bdrv_co_do_write_zeroes(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);
static QTAILQ_HEAD(, BlockDriverState) bdrv_states = static QTAILQ_HEAD(, BlockDriverState) bdrv_states =
QTAILQ_HEAD_INITIALIZER(bdrv_states); QTAILQ_HEAD_INITIALIZER(bdrv_states);
@ -323,6 +323,7 @@ BlockDriverState *bdrv_new(const char *device_name)
BlockDriverState *bs; BlockDriverState *bs;
bs = g_malloc0(sizeof(BlockDriverState)); bs = g_malloc0(sizeof(BlockDriverState));
QLIST_INIT(&bs->dirty_bitmaps);
pstrcpy(bs->device_name, sizeof(bs->device_name), device_name); pstrcpy(bs->device_name, sizeof(bs->device_name), device_name);
if (device_name[0] != '\0') { if (device_name[0] != '\0') {
QTAILQ_INSERT_TAIL(&bdrv_states, bs, list); QTAILQ_INSERT_TAIL(&bdrv_states, bs, list);
@ -1052,21 +1053,16 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
int64_t total_size; int64_t total_size;
BlockDriver *bdrv_qcow2; BlockDriver *bdrv_qcow2;
QEMUOptionParameter *create_options; QEMUOptionParameter *create_options;
char backing_filename[PATH_MAX]; QDict *snapshot_options;
if (qdict_size(options) != 0) {
error_setg(errp, "Can't use snapshot=on with driver-specific options");
ret = -EINVAL;
goto fail;
}
assert(filename != NULL);
/* if snapshot, we create a temporary backing file and open it /* if snapshot, we create a temporary backing file and open it
instead of opening 'filename' directly */ instead of opening 'filename' directly */
/* if there is a backing file, use it */ /* Get the required size from the image */
bs1 = bdrv_new(""); bs1 = bdrv_new("");
ret = bdrv_open(bs1, filename, NULL, 0, drv, &local_err); QINCREF(options);
ret = bdrv_open(bs1, filename, options, BDRV_O_NO_BACKING,
drv, &local_err);
if (ret < 0) { if (ret < 0) {
bdrv_unref(bs1); bdrv_unref(bs1);
goto fail; goto fail;
@ -1075,33 +1071,18 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
bdrv_unref(bs1); bdrv_unref(bs1);
/* Create the temporary image */
ret = get_tmp_filename(tmp_filename, sizeof(tmp_filename)); ret = get_tmp_filename(tmp_filename, sizeof(tmp_filename));
if (ret < 0) { if (ret < 0) {
error_setg_errno(errp, -ret, "Could not get temporary filename"); error_setg_errno(errp, -ret, "Could not get temporary filename");
goto fail; goto fail;
} }
/* Real path is meaningless for protocols */
if (path_has_protocol(filename)) {
snprintf(backing_filename, sizeof(backing_filename),
"%s", filename);
} else if (!realpath(filename, backing_filename)) {
ret = -errno;
error_setg_errno(errp, errno, "Could not resolve path '%s'", filename);
goto fail;
}
bdrv_qcow2 = bdrv_find_format("qcow2"); bdrv_qcow2 = bdrv_find_format("qcow2");
create_options = parse_option_parameters("", bdrv_qcow2->create_options, create_options = parse_option_parameters("", bdrv_qcow2->create_options,
NULL); NULL);
set_option_parameter_int(create_options, BLOCK_OPT_SIZE, total_size); set_option_parameter_int(create_options, BLOCK_OPT_SIZE, total_size);
set_option_parameter(create_options, BLOCK_OPT_BACKING_FILE,
backing_filename);
if (drv) {
set_option_parameter(create_options, BLOCK_OPT_BACKING_FMT,
drv->format_name);
}
ret = bdrv_create(bdrv_qcow2, tmp_filename, create_options, &local_err); ret = bdrv_create(bdrv_qcow2, tmp_filename, create_options, &local_err);
free_option_parameters(create_options); free_option_parameters(create_options);
@ -1114,6 +1095,22 @@ int bdrv_open(BlockDriverState *bs, const char *filename, QDict *options,
goto fail; goto fail;
} }
/* Prepare a new options QDict for the temporary file, where user
* options refer to the backing file */
if (filename) {
qdict_put(options, "file.filename", qstring_from_str(filename));
}
if (drv) {
qdict_put(options, "driver", qstring_from_str(drv->format_name));
}
snapshot_options = qdict_new();
qdict_put(snapshot_options, "backing", options);
qdict_flatten(snapshot_options);
bs->options = snapshot_options;
options = qdict_clone_shallow(bs->options);
filename = tmp_filename; filename = tmp_filename;
drv = bdrv_qcow2; drv = bdrv_qcow2;
bs->is_temporary = 1; bs->is_temporary = 1;
@ -1622,7 +1619,7 @@ static void bdrv_move_feature_fields(BlockDriverState *bs_dest,
bs_dest->iostatus = bs_src->iostatus; bs_dest->iostatus = bs_src->iostatus;
/* dirty bitmap */ /* dirty bitmap */
bs_dest->dirty_bitmap = bs_src->dirty_bitmap; bs_dest->dirty_bitmaps = bs_src->dirty_bitmaps;
/* reference count */ /* reference count */
bs_dest->refcnt = bs_src->refcnt; bs_dest->refcnt = bs_src->refcnt;
@ -1655,7 +1652,7 @@ void bdrv_swap(BlockDriverState *bs_new, BlockDriverState *bs_old)
/* bs_new must be anonymous and shouldn't have anything fancy enabled */ /* bs_new must be anonymous and shouldn't have anything fancy enabled */
assert(bs_new->device_name[0] == '\0'); assert(bs_new->device_name[0] == '\0');
assert(bs_new->dirty_bitmap == NULL); assert(QLIST_EMPTY(&bs_new->dirty_bitmaps));
assert(bs_new->job == NULL); assert(bs_new->job == NULL);
assert(bs_new->dev == NULL); assert(bs_new->dev == NULL);
assert(bs_new->in_use == 0); assert(bs_new->in_use == 0);
@ -1716,6 +1713,7 @@ static void bdrv_delete(BlockDriverState *bs)
assert(!bs->job); assert(!bs->job);
assert(!bs->in_use); assert(!bs->in_use);
assert(!bs->refcnt); assert(!bs->refcnt);
assert(QLIST_EMPTY(&bs->dirty_bitmaps));
bdrv_close(bs); bdrv_close(bs);
@ -2397,10 +2395,48 @@ int bdrv_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov)
return bdrv_rwv_co(bs, sector_num, qiov, true, 0); 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, return bdrv_rw_co(bs, sector_num, NULL, nb_sectors, true,
BDRV_REQ_ZERO_WRITE); 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, int bdrv_pread(BlockDriverState *bs, int64_t offset,
@ -2582,7 +2618,7 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BlockDriverState *bs,
if (drv->bdrv_co_write_zeroes && if (drv->bdrv_co_write_zeroes &&
buffer_is_zero(bounce_buffer, iov.iov_len)) { buffer_is_zero(bounce_buffer, iov.iov_len)) {
ret = bdrv_co_do_write_zeroes(bs, cluster_sector_num, ret = bdrv_co_do_write_zeroes(bs, cluster_sector_num,
cluster_nb_sectors); cluster_nb_sectors, 0);
} else { } else {
/* This does not change the data on the disk, it is not necessary /* This does not change the data on the disk, it is not necessary
* to flush even in cache=writethrough mode. * to flush even in cache=writethrough mode.
@ -2715,32 +2751,65 @@ int coroutine_fn bdrv_co_copy_on_readv(BlockDriverState *bs,
BDRV_REQ_COPY_ON_READ); 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, 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; BlockDriver *drv = bs->drv;
QEMUIOVector qiov; QEMUIOVector qiov;
struct iovec iov; struct iovec iov = {0};
int ret; int ret = 0;
/* TODO Emulate only part of misaligned requests instead of letting block int max_write_zeroes = bs->bl.max_write_zeroes ?
* drivers return -ENOTSUP and emulate everything */ bs->bl.max_write_zeroes : MAX_WRITE_ZEROES_DEFAULT;
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;
}
/* limit request size */
if (num > max_write_zeroes) {
num = max_write_zeroes;
}
ret = -ENOTSUP;
/* First try the efficient write zeroes operation */ /* First try the efficient write zeroes operation */
if (drv->bdrv_co_write_zeroes) { 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, num, flags);
if (ret != -ENOTSUP) {
return ret;
}
} }
if (ret == -ENOTSUP) {
/* Fall back to bounce buffer if write zeroes is unsupported */ /* Fall back to bounce buffer if write zeroes is unsupported */
iov.iov_len = nb_sectors * BDRV_SECTOR_SIZE; iov.iov_len = num * BDRV_SECTOR_SIZE;
iov.iov_base = qemu_blockalign(bs, iov.iov_len); if (iov.iov_base == NULL) {
memset(iov.iov_base, 0, iov.iov_len); /* 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); 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); qemu_vfree(iov.iov_base);
return ret; return ret;
@ -2783,7 +2852,7 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs,
if (ret < 0) { if (ret < 0) {
/* Do nothing, write notifier decided to fail this request */ /* Do nothing, write notifier decided to fail this request */
} else if (flags & BDRV_REQ_ZERO_WRITE) { } else 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 { } else {
ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov); ret = drv->bdrv_co_writev(bs, sector_num, nb_sectors, qiov);
} }
@ -2792,9 +2861,7 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs,
ret = bdrv_co_flush(bs); ret = bdrv_co_flush(bs);
} }
if (bs->dirty_bitmap) {
bdrv_set_dirty(bs, sector_num, nb_sectors); bdrv_set_dirty(bs, sector_num, nb_sectors);
}
if (bs->wr_highest_sector < sector_num + nb_sectors - 1) { if (bs->wr_highest_sector < sector_num + nb_sectors - 1) {
bs->wr_highest_sector = sector_num + nb_sectors - 1; bs->wr_highest_sector = sector_num + nb_sectors - 1;
@ -2817,12 +2884,17 @@ int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num,
} }
int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs, 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); 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, return bdrv_co_do_writev(bs, sector_num, nb_sectors, NULL,
BDRV_REQ_ZERO_WRITE); BDRV_REQ_ZERO_WRITE | flags);
} }
/** /**
@ -3102,6 +3174,36 @@ int bdrv_has_zero_init(BlockDriverState *bs)
return 0; 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 { typedef struct BdrvCoGetBlockStatusData {
BlockDriverState *bs; BlockDriverState *bs;
BlockDriverState *base; BlockDriverState *base;
@ -3171,8 +3273,8 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs,
*pnum, pnum); *pnum, pnum);
} }
if (!(ret & BDRV_BLOCK_DATA)) { if (!(ret & BDRV_BLOCK_DATA) && !(ret & BDRV_BLOCK_ZERO)) {
if (bdrv_has_zero_init(bs)) { if (bdrv_unallocated_blocks_are_zero(bs)) {
ret |= BDRV_BLOCK_ZERO; ret |= BDRV_BLOCK_ZERO;
} else if (bs->backing_hd) { } else if (bs->backing_hd) {
BlockDriverState *bs2 = bs->backing_hd; BlockDriverState *bs2 = bs->backing_hd;
@ -3330,7 +3432,7 @@ int bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num,
if (bdrv_check_request(bs, sector_num, nb_sectors)) if (bdrv_check_request(bs, sector_num, nb_sectors))
return -EIO; return -EIO;
assert(!bs->dirty_bitmap); assert(QLIST_EMPTY(&bs->dirty_bitmaps));
return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors); return drv->bdrv_write_compressed(bs, sector_num, buf, nb_sectors);
} }
@ -3419,6 +3521,19 @@ int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
return -ENOTSUP; return -ENOTSUP;
} }
int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
{
while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
bs = bs->file;
}
if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
}
return -ENOTSUP;
}
int bdrv_debug_resume(BlockDriverState *bs, const char *tag) 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) {
@ -4179,6 +4294,11 @@ static void coroutine_fn bdrv_discard_co_entry(void *opaque)
rwco->ret = bdrv_co_discard(rwco->bs, rwco->sector_num, rwco->nb_sectors); 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 coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
int nb_sectors) int nb_sectors)
{ {
@ -4190,9 +4310,7 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
return -EROFS; return -EROFS;
} }
if (bs->dirty_bitmap) {
bdrv_reset_dirty(bs, sector_num, nb_sectors); bdrv_reset_dirty(bs, sector_num, nb_sectors);
}
/* Do nothing if disabled. */ /* Do nothing if disabled. */
if (!(bs->open_flags & BDRV_O_UNMAP)) { if (!(bs->open_flags & BDRV_O_UNMAP)) {
@ -4200,7 +4318,37 @@ int coroutine_fn bdrv_co_discard(BlockDriverState *bs, int64_t sector_num,
} }
if (bs->drv->bdrv_co_discard) { 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) { } else if (bs->drv->bdrv_aio_discard) {
BlockDriverAIOCB *acb; BlockDriverAIOCB *acb;
CoroutineIOCompletion co = { CoroutineIOCompletion co = {
@ -4354,60 +4502,92 @@ bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov)
return true; return true;
} }
void bdrv_set_dirty_tracking(BlockDriverState *bs, int granularity) BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, int granularity)
{ {
int64_t bitmap_size; int64_t bitmap_size;
BdrvDirtyBitmap *bitmap;
assert((granularity & (granularity - 1)) == 0); assert((granularity & (granularity - 1)) == 0);
if (granularity) {
granularity >>= BDRV_SECTOR_BITS; granularity >>= BDRV_SECTOR_BITS;
assert(!bs->dirty_bitmap); assert(granularity);
bitmap_size = (bdrv_getlength(bs) >> BDRV_SECTOR_BITS); bitmap_size = (bdrv_getlength(bs) >> BDRV_SECTOR_BITS);
bs->dirty_bitmap = hbitmap_alloc(bitmap_size, ffs(granularity) - 1); bitmap = g_malloc0(sizeof(BdrvDirtyBitmap));
} else { bitmap->bitmap = hbitmap_alloc(bitmap_size, ffs(granularity) - 1);
if (bs->dirty_bitmap) { QLIST_INSERT_HEAD(&bs->dirty_bitmaps, bitmap, list);
hbitmap_free(bs->dirty_bitmap); return bitmap;
bs->dirty_bitmap = NULL; }
void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
{
BdrvDirtyBitmap *bm, *next;
QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
if (bm == bitmap) {
QLIST_REMOVE(bitmap, list);
hbitmap_free(bitmap->bitmap);
g_free(bitmap);
return;
} }
} }
} }
int bdrv_get_dirty(BlockDriverState *bs, int64_t sector) BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs)
{ {
if (bs->dirty_bitmap) { BdrvDirtyBitmap *bm;
return hbitmap_get(bs->dirty_bitmap, sector); BlockDirtyInfoList *list = NULL;
BlockDirtyInfoList **plist = &list;
QLIST_FOREACH(bm, &bs->dirty_bitmaps, list) {
BlockDirtyInfo *info = g_malloc0(sizeof(BlockDirtyInfo));
BlockDirtyInfoList *entry = g_malloc0(sizeof(BlockDirtyInfoList));
info->count = bdrv_get_dirty_count(bs, bm);
info->granularity =
((int64_t) BDRV_SECTOR_SIZE << hbitmap_granularity(bm->bitmap));
entry->value = info;
*plist = entry;
plist = &entry->next;
}
return list;
}
int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector)
{
if (bitmap) {
return hbitmap_get(bitmap->bitmap, sector);
} else { } else {
return 0; return 0;
} }
} }
void bdrv_dirty_iter_init(BlockDriverState *bs, HBitmapIter *hbi) void bdrv_dirty_iter_init(BlockDriverState *bs,
BdrvDirtyBitmap *bitmap, HBitmapIter *hbi)
{ {
hbitmap_iter_init(hbi, bs->dirty_bitmap, 0); hbitmap_iter_init(hbi, bitmap->bitmap, 0);
} }
void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector, void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector,
int nr_sectors) int nr_sectors)
{ {
hbitmap_set(bs->dirty_bitmap, cur_sector, nr_sectors); BdrvDirtyBitmap *bitmap;
} QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
hbitmap_set(bitmap->bitmap, cur_sector, nr_sectors);
void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector,
int nr_sectors)
{
hbitmap_reset(bs->dirty_bitmap, cur_sector, nr_sectors);
}
int64_t bdrv_get_dirty_count(BlockDriverState *bs)
{
if (bs->dirty_bitmap) {
return hbitmap_count(bs->dirty_bitmap);
} else {
return 0;
} }
} }
void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors)
{
BdrvDirtyBitmap *bitmap;
QLIST_FOREACH(bitmap, &bs->dirty_bitmaps, list) {
hbitmap_reset(bitmap->bitmap, cur_sector, nr_sectors);
}
}
int64_t bdrv_get_dirty_count(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
{
return hbitmap_count(bitmap->bitmap);
}
/* Get a reference to bs */ /* Get a reference to bs */
void bdrv_ref(BlockDriverState *bs) void bdrv_ref(BlockDriverState *bs)
{ {

View File

@ -138,7 +138,8 @@ static int coroutine_fn backup_do_cow(BlockDriverState *bs,
if (buffer_is_zero(iov.iov_base, iov.iov_len)) { if (buffer_is_zero(iov.iov_base, iov.iov_len)) {
ret = bdrv_co_write_zeroes(job->target, ret = bdrv_co_write_zeroes(job->target,
start * BACKUP_SECTORS_PER_CLUSTER, n); start * BACKUP_SECTORS_PER_CLUSTER,
n, BDRV_REQ_MAY_UNMAP);
} else { } else {
ret = bdrv_co_writev(job->target, ret = bdrv_co_writev(job->target,
start * BACKUP_SECTORS_PER_CLUSTER, n, start * BACKUP_SECTORS_PER_CLUSTER, n,

View File

@ -605,6 +605,31 @@ static int blkdebug_debug_resume(BlockDriverState *bs, const char *tag)
return -ENOENT; return -ENOENT;
} }
static int blkdebug_debug_remove_breakpoint(BlockDriverState *bs,
const char *tag)
{
BDRVBlkdebugState *s = bs->opaque;
BlkdebugSuspendedReq *r;
BlkdebugRule *rule, *next;
int i, ret = -ENOENT;
for (i = 0; i < BLKDBG_EVENT_MAX; i++) {
QLIST_FOREACH_SAFE(rule, &s->rules[i], next, next) {
if (rule->action == ACTION_SUSPEND &&
!strcmp(rule->options.suspend.tag, tag)) {
remove_rule(rule);
ret = 0;
}
}
}
QLIST_FOREACH(r, &s->suspended_reqs, next) {
if (!strcmp(r->tag, tag)) {
qemu_coroutine_enter(r->co, NULL);
ret = 0;
}
}
return ret;
}
static bool blkdebug_debug_is_suspended(BlockDriverState *bs, const char *tag) static bool blkdebug_debug_is_suspended(BlockDriverState *bs, const char *tag)
{ {
@ -639,6 +664,8 @@ static BlockDriver bdrv_blkdebug = {
.bdrv_debug_event = blkdebug_debug_event, .bdrv_debug_event = blkdebug_debug_event,
.bdrv_debug_breakpoint = blkdebug_debug_breakpoint, .bdrv_debug_breakpoint = blkdebug_debug_breakpoint,
.bdrv_debug_remove_breakpoint
= blkdebug_debug_remove_breakpoint,
.bdrv_debug_resume = blkdebug_debug_resume, .bdrv_debug_resume = blkdebug_debug_resume,
.bdrv_debug_is_suspended = blkdebug_debug_is_suspended, .bdrv_debug_is_suspended = blkdebug_debug_is_suspended,
}; };

View File

@ -103,40 +103,18 @@ static int cow_open(BlockDriverState *bs, QDict *options, int flags,
return ret; return ret;
} }
/* static inline void cow_set_bits(uint8_t *bitmap, int start, int64_t nb_sectors)
* 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; int64_t bitnum = start, last = start + nb_sectors;
uint8_t bitmap; while (bitnum < last) {
int ret; if ((bitnum & 7) == 0 && bitnum + 8 <= last) {
bitmap[bitnum / 8] = 0xFF;
ret = bdrv_pread(bs->file, offset, &bitmap, sizeof(bitmap)); bitnum += 8;
if (ret < 0) { continue;
return ret;
} }
bitmap[bitnum/8] |= (1 << (bitnum % 8));
if (bitmap & (1 << (bitnum % 8))) { bitnum++;
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) #define BITS_PER_BITMAP_SECTOR (512 * 8)
@ -174,18 +152,34 @@ static int coroutine_fn cow_co_is_allocated(BlockDriverState *bs,
{ {
int64_t bitnum = sector_num + sizeof(struct cow_header_v2) * 8; int64_t bitnum = sector_num + sizeof(struct cow_header_v2) * 8;
uint64_t offset = (bitnum / 8) & -BDRV_SECTOR_SIZE; uint64_t offset = (bitnum / 8) & -BDRV_SECTOR_SIZE;
uint8_t bitmap[BDRV_SECTOR_SIZE]; bool first = true;
int changed = 0, same = 0;
do {
int ret; int ret;
int changed; uint8_t bitmap[BDRV_SECTOR_SIZE];
bitnum &= BITS_PER_BITMAP_SECTOR - 1;
int sector_bits = MIN(nb_sectors, BITS_PER_BITMAP_SECTOR - bitnum);
ret = bdrv_pread(bs->file, offset, &bitmap, sizeof(bitmap)); ret = bdrv_pread(bs->file, offset, &bitmap, sizeof(bitmap));
if (ret < 0) { if (ret < 0) {
return ret; return ret;
} }
bitnum &= BITS_PER_BITMAP_SECTOR - 1; if (first) {
changed = cow_test_bit(bitnum, bitmap); changed = cow_test_bit(bitnum, bitmap);
*num_same = cow_find_streak(bitmap, changed, bitnum, nb_sectors); first = false;
}
same += cow_find_streak(bitmap, changed, bitnum, nb_sectors);
bitnum += sector_bits;
nb_sectors -= sector_bits;
offset += BDRV_SECTOR_SIZE;
} while (nb_sectors);
*num_same = same;
return changed; return changed;
} }
@ -204,18 +198,52 @@ static int64_t coroutine_fn cow_co_get_block_status(BlockDriverState *bs,
static int cow_update_bitmap(BlockDriverState *bs, int64_t sector_num, static int cow_update_bitmap(BlockDriverState *bs, int64_t sector_num,
int nb_sectors) int nb_sectors)
{ {
int error = 0; int64_t bitnum = sector_num + sizeof(struct cow_header_v2) * 8;
int i; uint64_t offset = (bitnum / 8) & -BDRV_SECTOR_SIZE;
bool first = true; bool first = true;
int sector_bits;
for (i = 0; i < nb_sectors; i++) { for ( ; nb_sectors;
error = cow_set_bit(bs, sector_num + i, &first); bitnum += sector_bits,
if (error) { nb_sectors -= sector_bits,
break; offset += BDRV_SECTOR_SIZE) {
int ret, set;
uint8_t bitmap[BDRV_SECTOR_SIZE];
bitnum &= BITS_PER_BITMAP_SECTOR - 1;
sector_bits = MIN(nb_sectors, BITS_PER_BITMAP_SECTOR - bitnum);
ret = bdrv_pread(bs->file, offset, &bitmap, sizeof(bitmap));
if (ret < 0) {
return ret;
}
/* Skip over any already set bits */
set = cow_find_streak(bitmap, 1, bitnum, sector_bits);
bitnum += set;
sector_bits -= set;
nb_sectors -= set;
if (!sector_bits) {
continue;
}
if (first) {
ret = bdrv_flush(bs->file);
if (ret < 0) {
return ret;
}
first = false;
}
cow_set_bits(bitmap, bitnum, sector_bits);
ret = bdrv_pwrite(bs->file, offset, &bitmap, sizeof(bitmap));
if (ret < 0) {
return ret;
} }
} }
return error; return 0;
} }
static int coroutine_fn cow_read(BlockDriverState *bs, int64_t sector_num, static int coroutine_fn cow_read(BlockDriverState *bs, int64_t sector_num,

View File

@ -56,6 +56,7 @@ typedef struct IscsiLun {
uint8_t lbprz; uint8_t lbprz;
struct scsi_inquiry_logical_block_provisioning lbp; struct scsi_inquiry_logical_block_provisioning lbp;
struct scsi_inquiry_block_limits bl; struct scsi_inquiry_block_limits bl;
unsigned char *zeroblock;
} IscsiLun; } IscsiLun;
typedef struct IscsiTask { typedef struct IscsiTask {
@ -87,7 +88,6 @@ typedef struct IscsiAIOCB {
#define NOP_INTERVAL 5000 #define NOP_INTERVAL 5000
#define MAX_NOP_FAILURES 3 #define MAX_NOP_FAILURES 3
#define ISCSI_CMD_RETRIES 5 #define ISCSI_CMD_RETRIES 5
#define ISCSI_MAX_UNMAP 131072
static void static void
iscsi_bh_cb(void *p) iscsi_bh_cb(void *p)
@ -912,8 +912,6 @@ coroutine_fn iscsi_co_discard(BlockDriverState *bs, int64_t sector_num,
IscsiLun *iscsilun = bs->opaque; IscsiLun *iscsilun = bs->opaque;
struct IscsiTask iTask; struct IscsiTask iTask;
struct unmap_list list; struct unmap_list list;
uint32_t nb_blocks;
uint32_t max_unmap;
if (!is_request_lun_aligned(sector_num, nb_sectors, iscsilun)) { if (!is_request_lun_aligned(sector_num, nb_sectors, iscsilun)) {
return -EINVAL; return -EINVAL;
@ -925,19 +923,9 @@ coroutine_fn iscsi_co_discard(BlockDriverState *bs, int64_t sector_num,
} }
list.lba = sector_qemu2lun(sector_num, iscsilun); 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); iscsi_co_init_iscsitask(iscsilun, &iTask);
list.num = nb_blocks;
if (list.num > max_unmap) {
list.num = max_unmap;
}
retry: retry:
if (iscsi_unmap_task(iscsilun->iscsi, iscsilun->lun, 0, 0, &list, 1, if (iscsi_unmap_task(iscsilun->iscsi, iscsilun->lun, 0, 0, &list, 1,
iscsi_co_generic_cb, &iTask) == NULL) { iscsi_co_generic_cb, &iTask) == NULL) {
@ -969,13 +957,68 @@ retry:
return -EIO; return -EIO;
} }
list.lba += list.num; return 0;
nb_blocks -= list.num; }
#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; return 0;
} }
#endif /* SCSI_SENSE_ASCQ_CAPACITY_DATA_HAS_CHANGED */
static int parse_chap(struct iscsi_context *iscsi, const char *target) static int parse_chap(struct iscsi_context *iscsi, const char *target)
{ {
QemuOptsList *list; QemuOptsList *list;
@ -1384,6 +1427,20 @@ static int iscsi_open(BlockDriverState *bs, QDict *options, int flags,
sizeof(struct scsi_inquiry_block_limits)); sizeof(struct scsi_inquiry_block_limits));
scsi_free_scsi_task(task); scsi_free_scsi_task(task);
task = NULL; 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) #if defined(LIBISCSI_FEATURE_NOP_COUNTER)
@ -1424,6 +1481,7 @@ static void iscsi_close(BlockDriverState *bs)
} }
qemu_aio_set_fd_handler(iscsi_get_fd(iscsi), NULL, NULL, NULL); qemu_aio_set_fd_handler(iscsi_get_fd(iscsi), NULL, NULL, NULL);
iscsi_destroy_context(iscsi); iscsi_destroy_context(iscsi);
g_free(iscsilun->zeroblock);
memset(iscsilun, 0, sizeof(IscsiLun)); memset(iscsilun, 0, sizeof(IscsiLun));
} }
@ -1506,6 +1564,14 @@ out:
return ret; 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[] = { static QEMUOptionParameter iscsi_create_options[] = {
{ {
.name = BLOCK_OPT_SIZE, .name = BLOCK_OPT_SIZE,
@ -1527,12 +1593,16 @@ static BlockDriver bdrv_iscsi = {
.create_options = iscsi_create_options, .create_options = iscsi_create_options,
.bdrv_getlength = iscsi_getlength, .bdrv_getlength = iscsi_getlength,
.bdrv_get_info = iscsi_get_info,
.bdrv_truncate = iscsi_truncate, .bdrv_truncate = iscsi_truncate,
#if defined(LIBISCSI_FEATURE_IOVECTOR) #if defined(LIBISCSI_FEATURE_IOVECTOR)
.bdrv_co_get_block_status = iscsi_co_get_block_status, .bdrv_co_get_block_status = iscsi_co_get_block_status,
#endif #endif
.bdrv_co_discard = iscsi_co_discard, .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_readv = iscsi_aio_readv,
.bdrv_aio_writev = iscsi_aio_writev, .bdrv_aio_writev = iscsi_aio_writev,

View File

@ -39,6 +39,7 @@ typedef struct MirrorBlockJob {
int64_t granularity; int64_t granularity;
size_t buf_size; size_t buf_size;
unsigned long *cow_bitmap; unsigned long *cow_bitmap;
BdrvDirtyBitmap *dirty_bitmap;
HBitmapIter hbi; HBitmapIter hbi;
uint8_t *buf; uint8_t *buf;
QSIMPLEQ_HEAD(, MirrorBuffer) buf_free; QSIMPLEQ_HEAD(, MirrorBuffer) buf_free;
@ -145,9 +146,10 @@ static void coroutine_fn mirror_iteration(MirrorBlockJob *s)
s->sector_num = hbitmap_iter_next(&s->hbi); s->sector_num = hbitmap_iter_next(&s->hbi);
if (s->sector_num < 0) { if (s->sector_num < 0) {
bdrv_dirty_iter_init(source, &s->hbi); bdrv_dirty_iter_init(source, s->dirty_bitmap, &s->hbi);
s->sector_num = hbitmap_iter_next(&s->hbi); s->sector_num = hbitmap_iter_next(&s->hbi);
trace_mirror_restart_iter(s, bdrv_get_dirty_count(source)); trace_mirror_restart_iter(s,
bdrv_get_dirty_count(source, s->dirty_bitmap));
assert(s->sector_num >= 0); assert(s->sector_num >= 0);
} }
@ -183,7 +185,7 @@ static void coroutine_fn mirror_iteration(MirrorBlockJob *s)
do { do {
int added_sectors, added_chunks; int added_sectors, added_chunks;
if (!bdrv_get_dirty(source, next_sector) || if (!bdrv_get_dirty(source, s->dirty_bitmap, next_sector) ||
test_bit(next_chunk, s->in_flight_bitmap)) { test_bit(next_chunk, s->in_flight_bitmap)) {
assert(nb_sectors > 0); assert(nb_sectors > 0);
break; break;
@ -249,7 +251,8 @@ static void coroutine_fn mirror_iteration(MirrorBlockJob *s)
/* Advance the HBitmapIter in parallel, so that we do not examine /* Advance the HBitmapIter in parallel, so that we do not examine
* the same sector twice. * the same sector twice.
*/ */
if (next_sector > hbitmap_next_sector && bdrv_get_dirty(source, next_sector)) { if (next_sector > hbitmap_next_sector
&& bdrv_get_dirty(source, s->dirty_bitmap, next_sector)) {
hbitmap_next_sector = hbitmap_iter_next(&s->hbi); hbitmap_next_sector = hbitmap_iter_next(&s->hbi);
} }
@ -355,7 +358,7 @@ static void coroutine_fn mirror_run(void *opaque)
} }
} }
bdrv_dirty_iter_init(bs, &s->hbi); bdrv_dirty_iter_init(bs, s->dirty_bitmap, &s->hbi);
last_pause_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME); last_pause_ns = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
for (;;) { for (;;) {
uint64_t delay_ns; uint64_t delay_ns;
@ -367,7 +370,7 @@ static void coroutine_fn mirror_run(void *opaque)
goto immediate_exit; goto immediate_exit;
} }
cnt = bdrv_get_dirty_count(bs); cnt = bdrv_get_dirty_count(bs, s->dirty_bitmap);
/* Note that even when no rate limit is applied we need to yield /* Note that even when no rate limit is applied we need to yield
* periodically with no pending I/O so that qemu_aio_flush() returns. * periodically with no pending I/O so that qemu_aio_flush() returns.
@ -409,7 +412,7 @@ static void coroutine_fn mirror_run(void *opaque)
should_complete = s->should_complete || should_complete = s->should_complete ||
block_job_is_cancelled(&s->common); block_job_is_cancelled(&s->common);
cnt = bdrv_get_dirty_count(bs); cnt = bdrv_get_dirty_count(bs, s->dirty_bitmap);
} }
} }
@ -424,7 +427,7 @@ static void coroutine_fn mirror_run(void *opaque)
*/ */
trace_mirror_before_drain(s, cnt); trace_mirror_before_drain(s, cnt);
bdrv_drain_all(); bdrv_drain_all();
cnt = bdrv_get_dirty_count(bs); cnt = bdrv_get_dirty_count(bs, s->dirty_bitmap);
} }
ret = 0; ret = 0;
@ -471,7 +474,7 @@ immediate_exit:
qemu_vfree(s->buf); qemu_vfree(s->buf);
g_free(s->cow_bitmap); g_free(s->cow_bitmap);
g_free(s->in_flight_bitmap); g_free(s->in_flight_bitmap);
bdrv_set_dirty_tracking(bs, 0); bdrv_release_dirty_bitmap(bs, s->dirty_bitmap);
bdrv_iostatus_disable(s->target); bdrv_iostatus_disable(s->target);
if (s->should_complete && ret == 0) { if (s->should_complete && ret == 0) {
if (bdrv_get_flags(s->target) != bdrv_get_flags(s->common.bs)) { if (bdrv_get_flags(s->target) != bdrv_get_flags(s->common.bs)) {
@ -575,7 +578,7 @@ void mirror_start(BlockDriverState *bs, BlockDriverState *target,
s->granularity = granularity; s->granularity = granularity;
s->buf_size = MAX(buf_size, granularity); s->buf_size = MAX(buf_size, granularity);
bdrv_set_dirty_tracking(bs, granularity); s->dirty_bitmap = bdrv_create_dirty_bitmap(bs, granularity);
bdrv_set_enable_write_cache(s->target, true); bdrv_set_enable_write_cache(s->target, true);
bdrv_set_on_error(s->target, on_target_error, on_target_error); bdrv_set_on_error(s->target, on_target_error, on_target_error);
bdrv_iostatus_enable(s->target); bdrv_iostatus_enable(s->target);

View File

@ -204,12 +204,9 @@ void bdrv_query_info(BlockDriverState *bs,
info->io_status = bs->iostatus; info->io_status = bs->iostatus;
} }
if (bs->dirty_bitmap) { if (!QLIST_EMPTY(&bs->dirty_bitmaps)) {
info->has_dirty = true; info->has_dirty_bitmaps = true;
info->dirty = g_malloc0(sizeof(*info->dirty)); info->dirty_bitmaps = bdrv_query_dirty_bitmaps(bs);
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) { if (bs->drv) {

View File

@ -1613,7 +1613,7 @@ static int expand_zero_clusters_in_l1(BlockDriverState *bs, uint64_t *l1_table,
} }
ret = bdrv_write_zeroes(bs->file, offset / BDRV_SECTOR_SIZE, ret = bdrv_write_zeroes(bs->file, offset / BDRV_SECTOR_SIZE,
s->cluster_sectors); s->cluster_sectors, 0);
if (ret < 0) { if (ret < 0) {
if (!preallocated) { if (!preallocated) {
qcow2_free_clusters(bs, offset, s->cluster_size, qcow2_free_clusters(bs, offset, s->cluster_size,

View File

@ -1588,7 +1588,8 @@ static int qcow2_create2(const char *filename, int64_t total_size,
/* Reopen the image without BDRV_O_NO_FLUSH to flush it before returning */ /* Reopen the image without BDRV_O_NO_FLUSH to flush it before returning */
ret = bdrv_open(bs, filename, NULL, ret = bdrv_open(bs, filename, NULL,
BDRV_O_RDWR | BDRV_O_CACHE_WB, drv, &local_err); BDRV_O_RDWR | BDRV_O_CACHE_WB | BDRV_O_NO_BACKING,
drv, &local_err);
if (error_is_set(&local_err)) { if (error_is_set(&local_err)) {
error_propagate(errp, local_err); error_propagate(errp, local_err);
goto out; goto out;
@ -1696,7 +1697,7 @@ static int qcow2_make_empty(BlockDriverState *bs)
} }
static coroutine_fn int qcow2_co_write_zeroes(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; int ret;
BDRVQcowState *s = bs->opaque; BDRVQcowState *s = bs->opaque;

View File

@ -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, static int coroutine_fn bdrv_qed_co_write_zeroes(BlockDriverState *bs,
int64_t sector_num, int64_t sector_num,
int nb_sectors) int nb_sectors,
BdrvRequestFlags flags)
{ {
BlockDriverAIOCB *blockacb; BlockDriverAIOCB *blockacb;
BDRVQEDState *s = bs->opaque; BDRVQEDState *s = bs->opaque;

View File

@ -68,9 +68,10 @@ static int64_t coroutine_fn raw_co_get_block_status(BlockDriverState *bs,
} }
static int coroutine_fn raw_co_write_zeroes(BlockDriverState *bs, static int coroutine_fn raw_co_write_zeroes(BlockDriverState *bs,
int64_t sector_num, int nb_sectors) int64_t sector_num, 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 int coroutine_fn raw_co_discard(BlockDriverState *bs, static int coroutine_fn raw_co_discard(BlockDriverState *bs,
@ -149,6 +150,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
Error **errp) Error **errp)
{ {
bs->sg = bs->file->sg; bs->sg = bs->file->sg;
bs->bl = bs->file->bl;
return 0; return 0;
} }

View File

@ -91,6 +91,14 @@
#define SD_NR_VDIS (1U << 24) #define SD_NR_VDIS (1U << 24)
#define SD_DATA_OBJ_SIZE (UINT64_C(1) << 22) #define SD_DATA_OBJ_SIZE (UINT64_C(1) << 22)
#define SD_MAX_VDI_SIZE (SD_DATA_OBJ_SIZE * MAX_DATA_OBJS) #define SD_MAX_VDI_SIZE (SD_DATA_OBJ_SIZE * MAX_DATA_OBJS)
/*
* For erasure coding, we use at most SD_EC_MAX_STRIP for data strips and
* (SD_EC_MAX_STRIP - 1) for parity strips
*
* SD_MAX_COPIES is sum of number of data strips and parity strips.
*/
#define SD_EC_MAX_STRIP 16
#define SD_MAX_COPIES (SD_EC_MAX_STRIP * 2 - 1)
#define SD_INODE_SIZE (sizeof(SheepdogInode)) #define SD_INODE_SIZE (sizeof(SheepdogInode))
#define CURRENT_VDI_ID 0 #define CURRENT_VDI_ID 0
@ -1464,9 +1472,7 @@ out:
return ret; return ret;
} }
static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size, static int do_sd_create(BDRVSheepdogState *s, uint32_t *vdi_id, int snapshot)
uint32_t base_vid, uint32_t *vdi_id, int snapshot,
uint8_t copy_policy)
{ {
SheepdogVdiReq hdr; SheepdogVdiReq hdr;
SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr; SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr;
@ -1483,11 +1489,11 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size,
* does not fit in buf? For now, just truncate and avoid buffer overrun. * does not fit in buf? For now, just truncate and avoid buffer overrun.
*/ */
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
pstrcpy(buf, sizeof(buf), filename); pstrcpy(buf, sizeof(buf), s->name);
memset(&hdr, 0, sizeof(hdr)); memset(&hdr, 0, sizeof(hdr));
hdr.opcode = SD_OP_NEW_VDI; hdr.opcode = SD_OP_NEW_VDI;
hdr.vdi_id = base_vid; hdr.vdi_id = s->inode.vdi_id;
wlen = SD_MAX_VDI_LEN; wlen = SD_MAX_VDI_LEN;
@ -1495,8 +1501,9 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size,
hdr.snapid = snapshot; hdr.snapid = snapshot;
hdr.data_length = wlen; hdr.data_length = wlen;
hdr.vdi_size = vdi_size; hdr.vdi_size = s->inode.vdi_size;
hdr.copy_policy = copy_policy; hdr.copy_policy = s->inode.copy_policy;
hdr.copies = s->inode.nr_copies;
ret = do_req(fd, (SheepdogReq *)&hdr, buf, &wlen, &rlen); ret = do_req(fd, (SheepdogReq *)&hdr, buf, &wlen, &rlen);
@ -1507,7 +1514,7 @@ static int do_sd_create(BDRVSheepdogState *s, char *filename, int64_t vdi_size,
} }
if (rsp->result != SD_RES_SUCCESS) { if (rsp->result != SD_RES_SUCCESS) {
error_report("%s, %s", sd_strerror(rsp->result), filename); error_report("%s, %s", sd_strerror(rsp->result), s->inode.name);
return -EIO; return -EIO;
} }
@ -1564,27 +1571,79 @@ out:
return ret; return ret;
} }
/*
* Sheepdog support two kinds of redundancy, full replication and erasure
* coding.
*
* # create a fully replicated vdi with x copies
* -o redundancy=x (1 <= x <= SD_MAX_COPIES)
*
* # create a erasure coded vdi with x data strips and y parity strips
* -o redundancy=x:y (x must be one of {2,4,8,16} and 1 <= y < SD_EC_MAX_STRIP)
*/
static int parse_redundancy(BDRVSheepdogState *s, const char *opt)
{
struct SheepdogInode *inode = &s->inode;
const char *n1, *n2;
long copy, parity;
char p[10];
pstrcpy(p, sizeof(p), opt);
n1 = strtok(p, ":");
n2 = strtok(NULL, ":");
if (!n1) {
return -EINVAL;
}
copy = strtol(n1, NULL, 10);
if (copy > SD_MAX_COPIES || copy < 1) {
return -EINVAL;
}
if (!n2) {
inode->copy_policy = 0;
inode->nr_copies = copy;
return 0;
}
if (copy != 2 && copy != 4 && copy != 8 && copy != 16) {
return -EINVAL;
}
parity = strtol(n2, NULL, 10);
if (parity >= SD_EC_MAX_STRIP || parity < 1) {
return -EINVAL;
}
/*
* 4 bits for parity and 4 bits for data.
* We have to compress upper data bits because it can't represent 16
*/
inode->copy_policy = ((copy / 2) << 4) + parity;
inode->nr_copies = copy + parity;
return 0;
}
static int sd_create(const char *filename, QEMUOptionParameter *options, static int sd_create(const char *filename, QEMUOptionParameter *options,
Error **errp) Error **errp)
{ {
int ret = 0; int ret = 0;
uint32_t vid = 0, base_vid = 0; uint32_t vid = 0;
int64_t vdi_size = 0;
char *backing_file = NULL; char *backing_file = NULL;
BDRVSheepdogState *s; BDRVSheepdogState *s;
char vdi[SD_MAX_VDI_LEN], tag[SD_MAX_VDI_TAG_LEN]; char tag[SD_MAX_VDI_TAG_LEN];
uint32_t snapid; uint32_t snapid;
bool prealloc = false; bool prealloc = false;
Error *local_err = NULL; Error *local_err = NULL;
s = g_malloc0(sizeof(BDRVSheepdogState)); s = g_malloc0(sizeof(BDRVSheepdogState));
memset(vdi, 0, sizeof(vdi));
memset(tag, 0, sizeof(tag)); memset(tag, 0, sizeof(tag));
if (strstr(filename, "://")) { if (strstr(filename, "://")) {
ret = sd_parse_uri(s, filename, vdi, &snapid, tag); ret = sd_parse_uri(s, filename, s->name, &snapid, tag);
} else { } else {
ret = parse_vdiname(s, filename, vdi, &snapid, tag); ret = parse_vdiname(s, filename, s->name, &snapid, tag);
} }
if (ret < 0) { if (ret < 0) {
goto out; goto out;
@ -1592,7 +1651,7 @@ static int sd_create(const char *filename, QEMUOptionParameter *options,
while (options && options->name) { while (options && options->name) {
if (!strcmp(options->name, BLOCK_OPT_SIZE)) { if (!strcmp(options->name, BLOCK_OPT_SIZE)) {
vdi_size = options->value.n; s->inode.vdi_size = options->value.n;
} else if (!strcmp(options->name, BLOCK_OPT_BACKING_FILE)) { } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FILE)) {
backing_file = options->value.s; backing_file = options->value.s;
} else if (!strcmp(options->name, BLOCK_OPT_PREALLOC)) { } else if (!strcmp(options->name, BLOCK_OPT_PREALLOC)) {
@ -1606,11 +1665,16 @@ static int sd_create(const char *filename, QEMUOptionParameter *options,
ret = -EINVAL; ret = -EINVAL;
goto out; goto out;
} }
} else if (!strcmp(options->name, BLOCK_OPT_REDUNDANCY)) {
ret = parse_redundancy(s, options->value.s);
if (ret < 0) {
goto out;
}
} }
options++; options++;
} }
if (vdi_size > SD_MAX_VDI_SIZE) { if (s->inode.vdi_size > SD_MAX_VDI_SIZE) {
error_report("too big image size"); error_report("too big image size");
ret = -EINVAL; ret = -EINVAL;
goto out; goto out;
@ -1645,12 +1709,10 @@ static int sd_create(const char *filename, QEMUOptionParameter *options,
goto out; goto out;
} }
base_vid = s->inode.vdi_id;
bdrv_unref(bs); bdrv_unref(bs);
} }
/* TODO: allow users to specify copy number */ ret = do_sd_create(s, &vid, 0);
ret = do_sd_create(s, vdi, vdi_size, base_vid, &vid, 0, 0);
if (!prealloc || ret) { if (!prealloc || ret) {
goto out; goto out;
} }
@ -1833,8 +1895,7 @@ static int sd_create_branch(BDRVSheepdogState *s)
* false bail out. * false bail out.
*/ */
deleted = sd_delete(s); deleted = sd_delete(s);
ret = do_sd_create(s, s->name, s->inode.vdi_size, s->inode.vdi_id, &vid, ret = do_sd_create(s, &vid, !deleted);
!deleted, s->inode.copy_policy);
if (ret) { if (ret) {
goto out; goto out;
} }
@ -2097,8 +2158,7 @@ static int sd_snapshot_create(BlockDriverState *bs, QEMUSnapshotInfo *sn_info)
goto cleanup; goto cleanup;
} }
ret = do_sd_create(s, s->name, s->inode.vdi_size, s->inode.vdi_id, &new_vid, ret = do_sd_create(s, &new_vid, 1);
1, s->inode.copy_policy);
if (ret < 0) { if (ret < 0) {
error_report("failed to create inode for snapshot. %s", error_report("failed to create inode for snapshot. %s",
strerror(errno)); strerror(errno));
@ -2407,6 +2467,22 @@ sd_co_get_block_status(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
return ret; return ret;
} }
static int64_t sd_get_allocated_file_size(BlockDriverState *bs)
{
BDRVSheepdogState *s = bs->opaque;
SheepdogInode *inode = &s->inode;
unsigned long i, last = DIV_ROUND_UP(inode->vdi_size, SD_DATA_OBJ_SIZE);
uint64_t size = 0;
for (i = 0; i < last; i++) {
if (inode->data_vdi_id[i] == 0) {
continue;
}
size += SD_DATA_OBJ_SIZE;
}
return size;
}
static QEMUOptionParameter sd_create_options[] = { static QEMUOptionParameter sd_create_options[] = {
{ {
.name = BLOCK_OPT_SIZE, .name = BLOCK_OPT_SIZE,
@ -2423,6 +2499,11 @@ static QEMUOptionParameter sd_create_options[] = {
.type = OPT_STRING, .type = OPT_STRING,
.help = "Preallocation mode (allowed values: off, full)" .help = "Preallocation mode (allowed values: off, full)"
}, },
{
.name = BLOCK_OPT_REDUNDANCY,
.type = OPT_STRING,
.help = "Redundancy of the image"
},
{ NULL } { NULL }
}; };
@ -2436,6 +2517,7 @@ static BlockDriver bdrv_sheepdog = {
.bdrv_create = sd_create, .bdrv_create = sd_create,
.bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_has_zero_init = bdrv_has_zero_init_1,
.bdrv_getlength = sd_getlength, .bdrv_getlength = sd_getlength,
.bdrv_get_allocated_file_size = sd_get_allocated_file_size,
.bdrv_truncate = sd_truncate, .bdrv_truncate = sd_truncate,
.bdrv_co_readv = sd_co_readv, .bdrv_co_readv = sd_co_readv,
@ -2465,6 +2547,7 @@ static BlockDriver bdrv_sheepdog_tcp = {
.bdrv_create = sd_create, .bdrv_create = sd_create,
.bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_has_zero_init = bdrv_has_zero_init_1,
.bdrv_getlength = sd_getlength, .bdrv_getlength = sd_getlength,
.bdrv_get_allocated_file_size = sd_get_allocated_file_size,
.bdrv_truncate = sd_truncate, .bdrv_truncate = sd_truncate,
.bdrv_co_readv = sd_co_readv, .bdrv_co_readv = sd_co_readv,
@ -2494,6 +2577,7 @@ static BlockDriver bdrv_sheepdog_unix = {
.bdrv_create = sd_create, .bdrv_create = sd_create,
.bdrv_has_zero_init = bdrv_has_zero_init_1, .bdrv_has_zero_init = bdrv_has_zero_init_1,
.bdrv_getlength = sd_getlength, .bdrv_getlength = sd_getlength,
.bdrv_get_allocated_file_size = sd_get_allocated_file_size,
.bdrv_truncate = sd_truncate, .bdrv_truncate = sd_truncate,
.bdrv_co_readv = sd_co_readv, .bdrv_co_readv = sd_co_readv,

View File

@ -88,6 +88,11 @@ static void coroutine_fn stream_run(void *opaque)
int n = 0; int n = 0;
void *buf; void *buf;
if (!bs->backing_hd) {
block_job_completed(&s->common, 0);
return;
}
s->common.len = bdrv_getlength(bs); s->common.len = bdrv_getlength(bs);
if (s->common.len < 0) { if (s->common.len < 0) {
block_job_completed(&s->common, s->common.len); block_job_completed(&s->common, s->common.len);

View File

@ -605,13 +605,20 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
header = footer.header; header = footer.header;
} }
if (le32_to_cpu(header.version) >= 3) { if (le32_to_cpu(header.version) > 3) {
char buf[64]; char buf[64];
snprintf(buf, sizeof(buf), "VMDK version %d", snprintf(buf, sizeof(buf), "VMDK version %d",
le32_to_cpu(header.version)); le32_to_cpu(header.version));
qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE, qerror_report(QERR_UNKNOWN_BLOCK_FORMAT_FEATURE,
bs->device_name, "vmdk", buf); bs->device_name, "vmdk", buf);
return -ENOTSUP; 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) { if (le32_to_cpu(header.num_gtes_per_gt) > 512) {
@ -1419,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, static int coroutine_fn vmdk_co_write_zeroes(BlockDriverState *bs,
int64_t sector_num, int64_t sector_num,
int nb_sectors) int nb_sectors,
BdrvRequestFlags flags)
{ {
int ret; int ret;
BDRVVmdkState *s = bs->opaque; BDRVVmdkState *s = bs->opaque;
@ -1689,7 +1697,7 @@ static int vmdk_create(const char *filename, QEMUOptionParameter *options,
} }
if (backing_file) { if (backing_file) {
BlockDriverState *bs = bdrv_new(""); BlockDriverState *bs = bdrv_new("");
ret = bdrv_open(bs, backing_file, NULL, 0, NULL, errp); ret = bdrv_open(bs, backing_file, NULL, BDRV_O_NO_BACKING, NULL, errp);
if (ret != 0) { if (ret != 0) {
bdrv_unref(bs); bdrv_unref(bs);
return ret; return ret;

View File

@ -18,6 +18,22 @@ typedef struct BlockDriverInfo {
/* offset at which the VM state can be saved (0 if not possible) */ /* offset at which the VM state can be saved (0 if not possible) */
int64_t vm_state_offset; int64_t vm_state_offset;
bool is_dirty; 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; } BlockDriverInfo;
typedef struct BlockFragInfo { typedef struct BlockFragInfo {
@ -62,6 +78,18 @@ typedef struct BlockDevOps {
void (*resize_cb)(void *opaque); void (*resize_cb)(void *opaque);
} BlockDevOps; } 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 #define BDRV_O_RDWR 0x0002
#define BDRV_O_SNAPSHOT 0x0008 /* open the file read only and save writes in a snapshot */ #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 */ #define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */
@ -187,7 +215,8 @@ int bdrv_read_unthrottled(BlockDriverState *bs, int64_t sector_num,
int bdrv_write(BlockDriverState *bs, int64_t sector_num, int bdrv_write(BlockDriverState *bs, int64_t sector_num,
const uint8_t *buf, int nb_sectors); const uint8_t *buf, int nb_sectors);
int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num, int bdrv_write_zeroes(BlockDriverState *bs, int64_t sector_num,
int nb_sectors); 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_writev(BlockDriverState *bs, int64_t sector_num, QEMUIOVector *qiov);
int bdrv_pread(BlockDriverState *bs, int64_t offset, int bdrv_pread(BlockDriverState *bs, int64_t offset,
void *buf, int count); void *buf, int count);
@ -209,7 +238,7 @@ int coroutine_fn bdrv_co_writev(BlockDriverState *bs, int64_t sector_num,
* because it may allocate memory for the entire region. * because it may allocate memory for the entire region.
*/ */
int coroutine_fn bdrv_co_write_zeroes(BlockDriverState *bs, int64_t sector_num, 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, BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
const char *backing_file); const char *backing_file);
int bdrv_get_backing_file_depth(BlockDriverState *bs); int bdrv_get_backing_file_depth(BlockDriverState *bs);
@ -316,6 +345,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_co_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors);
int bdrv_has_zero_init_1(BlockDriverState *bs); int bdrv_has_zero_init_1(BlockDriverState *bs);
int bdrv_has_zero_init(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, int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num,
int nb_sectors, int *pnum); int nb_sectors, int *pnum);
int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, int bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors,
@ -388,12 +419,16 @@ void *qemu_blockalign(BlockDriverState *bs, size_t size);
bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov); bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov);
struct HBitmapIter; struct HBitmapIter;
void bdrv_set_dirty_tracking(BlockDriverState *bs, int granularity); typedef struct BdrvDirtyBitmap BdrvDirtyBitmap;
int bdrv_get_dirty(BlockDriverState *bs, int64_t sector); BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState *bs, int granularity);
void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs);
int bdrv_get_dirty(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, int64_t sector);
void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors); void bdrv_set_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors);
void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors); void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors);
void bdrv_dirty_iter_init(BlockDriverState *bs, struct HBitmapIter *hbi); void bdrv_dirty_iter_init(BlockDriverState *bs,
int64_t bdrv_get_dirty_count(BlockDriverState *bs); BdrvDirtyBitmap *bitmap, struct HBitmapIter *hbi);
int64_t bdrv_get_dirty_count(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
void bdrv_enable_copy_on_read(BlockDriverState *bs); void bdrv_enable_copy_on_read(BlockDriverState *bs);
void bdrv_disable_copy_on_read(BlockDriverState *bs); void bdrv_disable_copy_on_read(BlockDriverState *bs);
@ -484,6 +519,7 @@ void bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event);
int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event, int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
const char *tag); const char *tag);
int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag);
int bdrv_debug_resume(BlockDriverState *bs, const char *tag); int bdrv_debug_resume(BlockDriverState *bs, const char *tag);
bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag); bool bdrv_debug_is_suspended(BlockDriverState *bs, const char *tag);

View File

@ -53,6 +53,7 @@
#define BLOCK_OPT_COMPAT_LEVEL "compat" #define BLOCK_OPT_COMPAT_LEVEL "compat"
#define BLOCK_OPT_LAZY_REFCOUNTS "lazy_refcounts" #define BLOCK_OPT_LAZY_REFCOUNTS "lazy_refcounts"
#define BLOCK_OPT_ADAPTER_TYPE "adapter_type" #define BLOCK_OPT_ADAPTER_TYPE "adapter_type"
#define BLOCK_OPT_REDUNDANCY "redundancy"
typedef struct BdrvTrackedRequest { typedef struct BdrvTrackedRequest {
BlockDriverState *bs; BlockDriverState *bs;
@ -130,7 +131,7 @@ struct BlockDriver {
* instead. * instead.
*/ */
int coroutine_fn (*bdrv_co_write_zeroes)(BlockDriverState *bs, 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, int coroutine_fn (*bdrv_co_discard)(BlockDriverState *bs,
int64_t sector_num, int nb_sectors); int64_t sector_num, int nb_sectors);
int64_t coroutine_fn (*bdrv_co_get_block_status)(BlockDriverState *bs, int64_t coroutine_fn (*bdrv_co_get_block_status)(BlockDriverState *bs,
@ -218,6 +219,8 @@ struct BlockDriver {
/* TODO Better pass a option string/QDict/QemuOpts to add any rule? */ /* TODO Better pass a option string/QDict/QemuOpts to add any rule? */
int (*bdrv_debug_breakpoint)(BlockDriverState *bs, const char *event, int (*bdrv_debug_breakpoint)(BlockDriverState *bs, const char *event,
const char *tag); const char *tag);
int (*bdrv_debug_remove_breakpoint)(BlockDriverState *bs,
const char *tag);
int (*bdrv_debug_resume)(BlockDriverState *bs, const char *tag); int (*bdrv_debug_resume)(BlockDriverState *bs, const char *tag);
bool (*bdrv_debug_is_suspended)(BlockDriverState *bs, const char *tag); bool (*bdrv_debug_is_suspended)(BlockDriverState *bs, const char *tag);
@ -230,6 +233,20 @@ struct BlockDriver {
QLIST_ENTRY(BlockDriver) list; 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 * Note: the function bdrv_append() copies and swaps contents of
* BlockDriverStates, so if you add new fields to this struct, please * BlockDriverStates, so if you add new fields to this struct, please
@ -283,6 +300,9 @@ struct BlockDriverState {
uint64_t total_time_ns[BDRV_MAX_IOTYPE]; uint64_t total_time_ns[BDRV_MAX_IOTYPE];
uint64_t wr_highest_sector; uint64_t wr_highest_sector;
/* I/O Limits */
BlockLimits bl;
/* Whether the disk can expand beyond total_sectors */ /* Whether the disk can expand beyond total_sectors */
int growable; int growable;
@ -301,7 +321,7 @@ struct BlockDriverState {
bool iostatus_enabled; bool iostatus_enabled;
BlockDeviceIoStatus iostatus; BlockDeviceIoStatus iostatus;
char device_name[32]; char device_name[32];
HBitmap *dirty_bitmap; QLIST_HEAD(, BdrvDirtyBitmap) dirty_bitmaps;
int refcnt; int refcnt;
int in_use; /* users other than guest access, eg. block migration */ int in_use; /* users other than guest access, eg. block migration */
QTAILQ_ENTRY(BlockDriverState) list; QTAILQ_ENTRY(BlockDriverState) list;

View File

@ -948,8 +948,8 @@
# @tray_open: #optional True if the device has a tray and it is open # @tray_open: #optional True if the device has a tray and it is open
# (only present if removable is true) # (only present if removable is true)
# #
# @dirty: #optional dirty bitmap information (only present if the dirty # @dirty-bitmaps: #optional dirty bitmaps information (only present if the
# bitmap is enabled) # driver has one or more dirty bitmaps) (Since 1.8)
# #
# @io-status: #optional @BlockDeviceIoStatus. Only present if the device # @io-status: #optional @BlockDeviceIoStatus. Only present if the device
# supports it and the VM is configured to stop on errors # supports it and the VM is configured to stop on errors
@ -963,7 +963,7 @@
'data': {'device': 'str', 'type': 'str', 'removable': 'bool', 'data': {'device': 'str', 'type': 'str', 'removable': 'bool',
'locked': 'bool', '*inserted': 'BlockDeviceInfo', 'locked': 'bool', '*inserted': 'BlockDeviceInfo',
'*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus', '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus',
'*dirty': 'BlockDirtyInfo' } } '*dirty-bitmaps': ['BlockDirtyInfo'] } }
## ##
# @query-block: # @query-block:

View File

@ -100,8 +100,12 @@ static void help(void)
" '-h' with or without a command shows this help and lists the supported formats\n" " '-h' with or without a command shows this help and lists the supported formats\n"
" '-p' show progress of command (only certain commands)\n" " '-p' show progress of command (only certain commands)\n"
" '-q' use Quiet mode - do not print any output (except errors)\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" " '-S' indicates the consecutive number of bytes (defaults to 4k) that must\n"
" for qemu-img to create a sparse image during conversion\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" " '--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" " '-n' skips the target volume creation (useful if the volume is created\n"
" prior to running qemu-img)\n" " prior to running qemu-img)\n"
@ -1351,7 +1355,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); ret = bdrv_parse_cache_flags(cache, &flags);
if (ret < 0) { if (ret < 0) {
error_report("Invalid cache option: %s", cache); error_report("Invalid cache option: %s", cache);
@ -1465,7 +1469,15 @@ static int img_convert(int argc, char **argv)
/* signal EOF to align */ /* signal EOF to align */
bdrv_write_compressed(out_bs, 0, NULL, 0); bdrv_write_compressed(out_bs, 0, NULL, 0);
} else { } else {
int has_zero_init = bdrv_has_zero_init(out_bs); 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 sector_num = 0; // total number of sectors converted so far
nb_sectors = total_sectors - sector_num; nb_sectors = total_sectors - sector_num;

View File

@ -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 growable format such as @code{qcow} or @code{cow}: the empty sectors
are detected and suppressed from the destination image. 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 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 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, @var{backing_file} should have the same content as the input's base image,

View File

@ -442,7 +442,7 @@ static void coroutine_fn co_write_zeroes_entry(void *opaque)
CoWriteZeroes *data = opaque; CoWriteZeroes *data = opaque;
data->ret = bdrv_co_write_zeroes(data->bs, data->offset / BDRV_SECTOR_SIZE, data->ret = bdrv_co_write_zeroes(data->bs, data->offset / BDRV_SECTOR_SIZE,
data->count / BDRV_SECTOR_SIZE); data->count / BDRV_SECTOR_SIZE, 0);
data->done = true; data->done = true;
if (data->ret < 0) { if (data->ret < 0) {
*data->total = data->ret; *data->total = data->ret;
@ -1956,6 +1956,18 @@ static int break_f(BlockDriverState *bs, int argc, char **argv)
return 0; return 0;
} }
static int remove_break_f(BlockDriverState *bs, int argc, char **argv)
{
int ret;
ret = bdrv_debug_remove_breakpoint(bs, argv[1]);
if (ret < 0) {
printf("Could not remove breakpoint %s: %s\n", argv[1], strerror(-ret));
}
return 0;
}
static const cmdinfo_t break_cmd = { static const cmdinfo_t break_cmd = {
.name = "break", .name = "break",
.argmin = 2, .argmin = 2,
@ -1966,6 +1978,15 @@ static const cmdinfo_t break_cmd = {
"request as tag", "request as tag",
}; };
static const cmdinfo_t remove_break_cmd = {
.name = "remove_break",
.argmin = 1,
.argmax = 1,
.cfunc = remove_break_f,
.args = "tag",
.oneline = "remove a breakpoint by tag",
};
static int resume_f(BlockDriverState *bs, int argc, char **argv) static int resume_f(BlockDriverState *bs, int argc, char **argv)
{ {
int ret; int ret;
@ -2126,6 +2147,7 @@ static void __attribute((constructor)) init_qemuio_commands(void)
qemuio_add_command(&alloc_cmd); qemuio_add_command(&alloc_cmd);
qemuio_add_command(&map_cmd); qemuio_add_command(&map_cmd);
qemuio_add_command(&break_cmd); qemuio_add_command(&break_cmd);
qemuio_add_command(&remove_break_cmd);
qemuio_add_command(&resume_cmd); qemuio_add_command(&resume_cmd);
qemuio_add_command(&wait_break_cmd); qemuio_add_command(&wait_break_cmd);
qemuio_add_command(&abort_cmd); qemuio_add_command(&abort_cmd);

View File

@ -481,7 +481,7 @@ static void qdict_do_flatten(QDict *qdict, QDict *target, const char *prefix)
{ {
QObject *value; QObject *value;
const QDictEntry *entry, *next; const QDictEntry *entry, *next;
const char *new_key; char *new_key;
bool delete; bool delete;
entry = qdict_first(qdict); entry = qdict_first(qdict);
@ -494,17 +494,23 @@ static void qdict_do_flatten(QDict *qdict, QDict *target, const char *prefix)
delete = false; delete = false;
if (prefix) { if (prefix) {
qobject_incref(value);
new_key = g_strdup_printf("%s.%s", prefix, entry->key); new_key = g_strdup_printf("%s.%s", prefix, entry->key);
}
if (qobject_type(value) == QTYPE_QDICT) {
/* Entries of QDicts are processed recursively, the QDict object
* itself disappears. */
qdict_do_flatten(qobject_to_qdict(value), target,
new_key ? new_key : entry->key);
delete = true;
} else if (prefix) {
/* All other objects are moved to the target unchanged. */
qobject_incref(value);
qdict_put_obj(target, new_key, value); qdict_put_obj(target, new_key, value);
delete = true; delete = true;
} }
if (qobject_type(value) == QTYPE_QDICT) { g_free(new_key);
qdict_do_flatten(qobject_to_qdict(value), target,
new_key ? new_key : entry->key);
delete = true;
}
if (delete) { if (delete) {
qdict_del(qdict, entry->key); qdict_del(qdict, entry->key);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -3,142 +3,142 @@ Creating backing file
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
=== IO: pattern 0x11 === 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) 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) 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) 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) 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) 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) 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) 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) 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 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
=== IO: pattern 0x22 === 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) 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) 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) 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) 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' Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 backing_file='TEST_DIR/t.IMGFMT.base_old'
=== IO: pattern 0x33 === 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) 256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
qemu-io> wrote 262144/262144 bytes at offset 524288 wrote 262144/262144 bytes at offset 524288
256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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 === 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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x11 === IO: pattern 0x11
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x00 === IO: pattern 0x00
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x11 === IO: pattern 0x11
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x00 === IO: pattern 0x00
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x11 === IO: pattern 0x11
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x00 === IO: pattern 0x00
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x11 === IO: pattern 0x11
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x00 === IO: pattern 0x00
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io>
Rebase and test again Rebase and test again
=== IO: pattern 0x33 === 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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x11 === IO: pattern 0x11
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x00 === IO: pattern 0x00
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x11 === IO: pattern 0x11
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x00 === IO: pattern 0x00
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x33 === IO: pattern 0x33
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x11 === IO: pattern 0x11
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x00 === IO: pattern 0x00
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x11 === IO: pattern 0x11
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0x00 === IO: pattern 0x00
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> *** done *** done

View File

@ -56,7 +56,7 @@ _check_test_img
echo echo
echo "=== Resizing image" echo "=== Resizing image"
$QEMU_IO "$TEST_IMG" <<EOF $QEMU_IO "$TEST_IMG" <<EOF | _filter_qemu_io
length length
truncate $big_size truncate $big_size
length length

View File

@ -5,23 +5,23 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
=== Writing whole image === Writing whole image
=== IO: pattern 0xc5 === 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) 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 === Resizing image
qemu-io> 128 MiB 128 MiB
qemu-io> qemu-io> 384 MiB 384 MiB
qemu-io> No errors were found on the image. No errors were found on the image.
=== Verifying image size after reopen === Verifying image size after reopen
384 MiB 384 MiB
=== Verifying resized image === Verifying resized image
=== IO: pattern 0xc5 === 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) 128 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0 === IO: pattern 0
qemu-io> read 268435456/268435456 bytes at offset 134217728 read 268435456/268435456 bytes at offset 134217728
256 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 256 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> *** done *** done

View File

@ -3,467 +3,467 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=3221227008
Filling base image Filling base image
=== IO: pattern 195 === 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 Creating test image with backing file
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294968832 backing_file='TEST_DIR/t.IMGFMT.base' Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294968832 backing_file='TEST_DIR/t.IMGFMT.base'
Filling test image Filling test image
=== IO: pattern 196 === 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 Reading
=== IO: pattern 195 === 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 196 === IO: pattern 196
qemu-io> read 512/512 bytes at offset 3221194752 read 512/512 bytes at offset 3221194752
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 0 === IO: pattern 0
qemu-io> read 512/512 bytes at offset 3221227008 read 512/512 bytes at offset 3221227008
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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. No errors were found on the image.
*** done *** done

View File

@ -34,6 +34,7 @@ class TestSingleDrive(iotests.QMPTestCase):
iotests.create_image(backing_img, TestSingleDrive.image_len) iotests.create_image(backing_img, TestSingleDrive.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' % backing_img, mid_img)
qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % mid_img, test_img) qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % mid_img, test_img)
qemu_io('-c', 'write -P 0x1 0 512', backing_img)
self.vm = iotests.VM().add_drive(test_img) self.vm = iotests.VM().add_drive(test_img)
self.vm.launch() self.vm.launch()
@ -69,6 +70,7 @@ class TestSingleDrive(iotests.QMPTestCase):
def test_stream_pause(self): def test_stream_pause(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
self.vm.pause_drive('drive0')
result = self.vm.qmp('block-stream', device='drive0') result = self.vm.qmp('block-stream', device='drive0')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -86,6 +88,7 @@ class TestSingleDrive(iotests.QMPTestCase):
result = self.vm.qmp('block-job-resume', device='drive0') result = self.vm.qmp('block-job-resume', device='drive0')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
self.vm.resume_drive('drive0')
completed = False completed = False
while not completed: while not completed:
for event in self.vm.get_qmp_events(wait=True): for event in self.vm.get_qmp_events(wait=True):
@ -391,7 +394,7 @@ class TestStreamStop(iotests.QMPTestCase):
qemu_io('-c', 'write -P 0x1 0 32M', backing_img) 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_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, test_img)
qemu_io('-c', 'write -P 0x1 32M 32M', test_img) qemu_io('-c', 'write -P 0x1 32M 32M', test_img)
self.vm = iotests.VM().add_drive(test_img) self.vm = iotests.VM().add_drive("blkdebug::" + test_img)
self.vm.launch() self.vm.launch()
def tearDown(self): def tearDown(self):
@ -402,6 +405,7 @@ class TestStreamStop(iotests.QMPTestCase):
def test_stream_stop(self): def test_stream_stop(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
self.vm.pause_drive('drive0')
result = self.vm.qmp('block-stream', device='drive0') result = self.vm.qmp('block-stream', device='drive0')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -409,7 +413,7 @@ class TestStreamStop(iotests.QMPTestCase):
events = self.vm.get_qmp_events(wait=False) events = self.vm.get_qmp_events(wait=False)
self.assertEqual(events, [], 'unexpected QMP event: %s' % events) self.assertEqual(events, [], 'unexpected QMP event: %s' % events)
self.cancel_and_wait() self.cancel_and_wait(resume=True)
class TestSetSpeed(iotests.QMPTestCase): class TestSetSpeed(iotests.QMPTestCase):
image_len = 80 * 1024 * 1024 # MB image_len = 80 * 1024 * 1024 # MB
@ -419,7 +423,7 @@ class TestSetSpeed(iotests.QMPTestCase):
qemu_io('-c', 'write -P 0x1 0 32M', backing_img) 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_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, test_img)
qemu_io('-c', 'write -P 0x1 32M 32M', test_img) qemu_io('-c', 'write -P 0x1 32M 32M', test_img)
self.vm = iotests.VM().add_drive(test_img) self.vm = iotests.VM().add_drive('blkdebug::' + test_img)
self.vm.launch() self.vm.launch()
def tearDown(self): def tearDown(self):
@ -453,6 +457,7 @@ class TestSetSpeed(iotests.QMPTestCase):
def test_set_speed(self): def test_set_speed(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
self.vm.pause_drive('drive0')
result = self.vm.qmp('block-stream', device='drive0') result = self.vm.qmp('block-stream', device='drive0')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -469,7 +474,8 @@ class TestSetSpeed(iotests.QMPTestCase):
self.assert_qmp(result, 'return[0]/device', 'drive0') self.assert_qmp(result, 'return[0]/device', 'drive0')
self.assert_qmp(result, 'return[0]/speed', 8 * 1024 * 1024) self.assert_qmp(result, 'return[0]/speed', 8 * 1024 * 1024)
self.cancel_and_wait() self.cancel_and_wait(resume=True)
self.vm.pause_drive('drive0')
# Check setting speed in block-stream works # Check setting speed in block-stream works
result = self.vm.qmp('block-stream', device='drive0', speed=4 * 1024 * 1024) result = self.vm.qmp('block-stream', device='drive0', speed=4 * 1024 * 1024)
@ -479,7 +485,7 @@ class TestSetSpeed(iotests.QMPTestCase):
self.assert_qmp(result, 'return[0]/device', 'drive0') self.assert_qmp(result, 'return[0]/device', 'drive0')
self.assert_qmp(result, 'return[0]/speed', 4 * 1024 * 1024) self.assert_qmp(result, 'return[0]/speed', 4 * 1024 * 1024)
self.cancel_and_wait() self.cancel_and_wait(resume=True)
def test_set_speed_invalid(self): def test_set_speed_invalid(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()

View File

@ -3,73 +3,73 @@ QA output created by 032
=== Prepare image === === Prepare image ===
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io>
=== AIO request during close === === AIO request during close ===
wrote 4194304/4194304 bytes at offset 0 wrote 4194304/4194304 bytes at offset 0

View File

@ -2,7 +2,7 @@ QA output created by 035
creating image creating image
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)

View File

@ -2,519 +2,519 @@ QA output created by 037
== creating backing file for COW tests == == creating backing file for COW tests ==
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 == == COW in a single cluster ==
wrote 2048/2048 bytes at offset 0 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) 2 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io>
== COW in two-cluster allocations == == COW in two-cluster allocations ==
wrote 6144/6144 bytes at offset 16384 wrote 6144/6144 bytes at offset 16384
6 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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) 5 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 6144/6144 bytes at offset 16384 read 6144/6144 bytes at offset 16384
6 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io>
== COW in multi-cluster allocations == == COW in multi-cluster allocations ==
wrote 15360/15360 bytes at offset 49152 wrote 15360/15360 bytes at offset 49152
15 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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) 15 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
read 15360/15360 bytes at offset 49152 read 15360/15360 bytes at offset 49152
15 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 *** done

File diff suppressed because it is too large Load Diff

View File

@ -39,21 +39,6 @@ class ImageCommitTestCase(iotests.QMPTestCase):
result = self.vm.qmp('query-block-jobs') result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return', []) 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)
self.assert_qmp(result, 'return', {})
cancelled = False
while not cancelled:
for event in self.vm.get_qmp_events(wait=True):
if event['event'] == 'BLOCK_JOB_CANCELLED':
self.assert_qmp(event, 'data/type', 'commit')
self.assert_qmp(event, 'data/device', drive)
cancelled = True
self.assert_no_active_commit()
class TestSingleDrive(ImageCommitTestCase): class TestSingleDrive(ImageCommitTestCase):
image_len = 1 * 1024 * 1024 image_len = 1 * 1024 * 1024
test_len = 1 * 1024 * 256 test_len = 1 * 1024 * 256
@ -243,6 +228,7 @@ class TestSetSpeed(ImageCommitTestCase):
qemu_img('create', backing_img, str(TestSetSpeed.image_len)) 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' % backing_img, mid_img)
qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % mid_img, test_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)
self.vm = iotests.VM().add_drive(test_img) self.vm = iotests.VM().add_drive(test_img)
self.vm.launch() self.vm.launch()
@ -255,6 +241,7 @@ class TestSetSpeed(ImageCommitTestCase):
def test_set_speed(self): def test_set_speed(self):
self.assert_no_active_commit() self.assert_no_active_commit()
self.vm.pause_drive('drive0')
result = self.vm.qmp('block-commit', device='drive0', top=mid_img, speed=1024 * 1024) result = self.vm.qmp('block-commit', device='drive0', top=mid_img, speed=1024 * 1024)
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -263,7 +250,7 @@ class TestSetSpeed(ImageCommitTestCase):
self.assert_qmp(result, 'return[0]/device', 'drive0') self.assert_qmp(result, 'return[0]/device', 'drive0')
self.assert_qmp(result, 'return[0]/speed', 1024 * 1024) self.assert_qmp(result, 'return[0]/speed', 1024 * 1024)
self.cancel_and_wait() self.cancel_and_wait(resume=True)
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -2,238 +2,238 @@ QA output created by 046
== creating backing file for COW tests == == creating backing file for COW tests ==
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 == == Some concurrent requests touching the same cluster ==
qemu-io> qemu-io> qemu-io> blkdebug: Suspended request 'A' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
qemu-io> wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> qemu-io> blkdebug: Suspended request 'A' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
qemu-io> wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
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) 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> qemu-io> blkdebug: Suspended request 'A' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
qemu-io> wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
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) 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) 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' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
qemu-io> wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 57344/57344 bytes at offset XXX wrote 57344/57344 bytes at offset XXX
56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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) 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) 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) 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' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
qemu-io> wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 57344/57344 bytes at offset XXX wrote 57344/57344 bytes at offset XXX
56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 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) 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) 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) 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' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
qemu-io> wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 57344/57344 bytes at offset XXX wrote 57344/57344 bytes at offset XXX
56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 56 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> qemu-io> blkdebug: Suspended request 'A' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
qemu-io> wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 98304/98304 bytes at offset XXX wrote 98304/98304 bytes at offset XXX
96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> qemu-io> blkdebug: Suspended request 'A' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
qemu-io> wrote 8192/8192 bytes at offset XXX wrote 8192/8192 bytes at offset XXX
8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 81920/81920 bytes at offset XXX wrote 81920/81920 bytes at offset XXX
80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 80 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> qemu-io> blkdebug: Suspended request 'A' blkdebug: Suspended request 'A'
qemu-io> qemu-io> qemu-io> blkdebug: Resuming request 'A' blkdebug: Resuming request 'A'
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) 32 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
wrote 98304/98304 bytes at offset XXX wrote 98304/98304 bytes at offset XXX
96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 96 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io>
== Verify image content == == 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 *** done

View File

@ -1,22 +1,22 @@
QA output created by 047 QA output created by 047
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 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) 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) 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) 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) 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) 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) 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) 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) 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) 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 *** done

View File

@ -1,15 +1,15 @@
QA output created by 048 QA output created by 048
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
=== IO: pattern 45 === 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) 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) 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) 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) 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
0 0
Image resized. Image resized.
@ -19,37 +19,37 @@ Images are identical.
Strict mode: Image size mismatch! Strict mode: Image size mismatch!
1 1
=== IO: pattern 67 === 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) 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 1
=== IO: pattern 123 === 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) 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 1
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
=== IO: pattern 100 === IO: pattern 100
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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> === IO: pattern 101 === IO: pattern 101
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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> Content mismatch at offset 512! Content mismatch at offset 512!
1 1
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
=== IO: pattern 102 === IO: pattern 102
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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> qemu-img: Error while reading offset 0 of blkdebug:TEST_DIR/blkdebug.conf:TEST_DIR/t.IMGFMT: Input/output error qemu-img: Error while reading offset 0 of blkdebug:TEST_DIR/blkdebug.conf:TEST_DIR/t.IMGFMT: Input/output error
qemu-img: Error while reading offset 0: Input/output error qemu-img: Error while reading offset 0: Input/output error
4 4
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
Formatting 'TEST_DIR/t.IMGFMT.2', fmt=IMGFMT size=0 Formatting 'TEST_DIR/t.IMGFMT.2', fmt=IMGFMT size=0
=== IO: pattern 102 === IO: pattern 102
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) 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
qemu-io> qemu-img: Error while reading offset 0 of blkdebug:TEST_DIR/blkdebug.conf:TEST_DIR/t.IMGFMT: Input/output error qemu-img: Error while reading offset 0 of blkdebug:TEST_DIR/blkdebug.conf:TEST_DIR/t.IMGFMT: Input/output error
qemu-img: Error while reading offset 0 of blkdebug:TEST_DIR/blkdebug.conf:TEST_DIR/t.IMGFMT: Input/output error qemu-img: Error while reading offset 0 of blkdebug:TEST_DIR/blkdebug.conf:TEST_DIR/t.IMGFMT: Input/output error
Warning: Image size mismatch! Warning: Image size mismatch!
4 4

View File

@ -183,6 +183,23 @@ run_qemu -hda foo:bar
run_qemu -drive file=foo:bar run_qemu -drive file=foo:bar
run_qemu -drive file.filename=foo:bar run_qemu -drive file.filename=foo:bar
echo
echo === Snapshot mode ===
echo
$QEMU_IO -c "write -P 0x11 0 4k" "$TEST_IMG" | _filter_qemu_io
echo 'qemu-io ide0-hd0 "write -P 0x22 0 4k"' | run_qemu -drive file="$TEST_IMG" -snapshot | _filter_qemu_io
echo 'qemu-io ide0-hd0 "write -P 0x22 0 4k"' | run_qemu -drive file="$TEST_IMG",snapshot=on | _filter_qemu_io
echo 'qemu-io ide0-hd0 "write -P 0x22 0 4k"' | run_qemu -drive file.filename="$TEST_IMG",driver=qcow2,snapshot=on | _filter_qemu_io
echo 'qemu-io ide0-hd0 "write -P 0x22 0 4k"' | run_qemu -drive file.filename="$TEST_IMG",driver=qcow2 -snapshot | _filter_qemu_io
$QEMU_IO -c "read -P 0x11 0 4k" "$TEST_IMG" | _filter_qemu_io
echo 'qemu-io ide0-hd0 "write -P 0x22 0 4k"' | run_qemu -drive file="$TEST_IMG",snapshot=off | _filter_qemu_io
$QEMU_IO -c "read -P 0x22 0 4k" "$TEST_IMG" | _filter_qemu_io
# success, all done # success, all done
echo "*** done" echo "*** done"
rm -f $seq.full rm -f $seq.full

View File

@ -237,4 +237,48 @@ QEMU_PROG: -drive file=foo:bar: could not open disk image foo:bar: Unknown proto
Testing: -drive file.filename=foo:bar 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 'foo:bar': No such file or directory
=== Snapshot mode ===
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Testing: -drive file=TEST_DIR/t.qcow2 -snapshot
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) qqeqemqemuqemu-qemu-iqemu-ioqemu-io qemu-io iqemu-io idqemu-io ideqemu-io ide0qemu-io ide0-qemu-io ide0-hqemu-io ide0-hdqemu-io ide0-hd0qemu-io ide0-hd0 qemu-io ide0-hd0 "qemu-io ide0-hd0 "wqemu-io ide0-hd0 "wrqemu-io ide0-hd0 "wriqemu-io ide0-hd0 "writqemu-io ide0-hd0 "writeqemu-io ide0-hd0 "write qemu-io ide0-hd0 "write -qemu-io ide0-hd0 "write -Pqemu-io ide0-hd0 "write -P qemu-io ide0-hd0 "write -P 0qemu-io ide0-hd0 "write -P 0xqemu-io ide0-hd0 "write -P 0x2qemu-io ide0-hd0 "write -P 0x22qemu-io ide0-hd0 "write -P 0x22 qemu-io ide0-hd0 "write -P 0x22 0qemu-io ide0-hd0 "write -P 0x22 0 qemu-io ide0-hd0 "write -P 0x22 0 4qemu-io ide0-hd0 "write -P 0x22 0 4kqemu-io ide0-hd0 "write -P 0x22 0 4k"
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
(qemu) qququiquit
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=on
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) qqeqemqemuqemu-qemu-iqemu-ioqemu-io qemu-io iqemu-io idqemu-io ideqemu-io ide0qemu-io ide0-qemu-io ide0-hqemu-io ide0-hdqemu-io ide0-hd0qemu-io ide0-hd0 qemu-io ide0-hd0 "qemu-io ide0-hd0 "wqemu-io ide0-hd0 "wrqemu-io ide0-hd0 "wriqemu-io ide0-hd0 "writqemu-io ide0-hd0 "writeqemu-io ide0-hd0 "write qemu-io ide0-hd0 "write -qemu-io ide0-hd0 "write -Pqemu-io ide0-hd0 "write -P qemu-io ide0-hd0 "write -P 0qemu-io ide0-hd0 "write -P 0xqemu-io ide0-hd0 "write -P 0x2qemu-io ide0-hd0 "write -P 0x22qemu-io ide0-hd0 "write -P 0x22 qemu-io ide0-hd0 "write -P 0x22 0qemu-io ide0-hd0 "write -P 0x22 0 qemu-io ide0-hd0 "write -P 0x22 0 4qemu-io ide0-hd0 "write -P 0x22 0 4kqemu-io ide0-hd0 "write -P 0x22 0 4k"
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
(qemu) qququiquit
Testing: -drive file.filename=TEST_DIR/t.qcow2,driver=qcow2,snapshot=on
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) qqeqemqemuqemu-qemu-iqemu-ioqemu-io qemu-io iqemu-io idqemu-io ideqemu-io ide0qemu-io ide0-qemu-io ide0-hqemu-io ide0-hdqemu-io ide0-hd0qemu-io ide0-hd0 qemu-io ide0-hd0 "qemu-io ide0-hd0 "wqemu-io ide0-hd0 "wrqemu-io ide0-hd0 "wriqemu-io ide0-hd0 "writqemu-io ide0-hd0 "writeqemu-io ide0-hd0 "write qemu-io ide0-hd0 "write -qemu-io ide0-hd0 "write -Pqemu-io ide0-hd0 "write -P qemu-io ide0-hd0 "write -P 0qemu-io ide0-hd0 "write -P 0xqemu-io ide0-hd0 "write -P 0x2qemu-io ide0-hd0 "write -P 0x22qemu-io ide0-hd0 "write -P 0x22 qemu-io ide0-hd0 "write -P 0x22 0qemu-io ide0-hd0 "write -P 0x22 0 qemu-io ide0-hd0 "write -P 0x22 0 4qemu-io ide0-hd0 "write -P 0x22 0 4kqemu-io ide0-hd0 "write -P 0x22 0 4k"
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
(qemu) qququiquit
Testing: -drive file.filename=TEST_DIR/t.qcow2,driver=qcow2 -snapshot
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) qqeqemqemuqemu-qemu-iqemu-ioqemu-io qemu-io iqemu-io idqemu-io ideqemu-io ide0qemu-io ide0-qemu-io ide0-hqemu-io ide0-hdqemu-io ide0-hd0qemu-io ide0-hd0 qemu-io ide0-hd0 "qemu-io ide0-hd0 "wqemu-io ide0-hd0 "wrqemu-io ide0-hd0 "wriqemu-io ide0-hd0 "writqemu-io ide0-hd0 "writeqemu-io ide0-hd0 "write qemu-io ide0-hd0 "write -qemu-io ide0-hd0 "write -Pqemu-io ide0-hd0 "write -P qemu-io ide0-hd0 "write -P 0qemu-io ide0-hd0 "write -P 0xqemu-io ide0-hd0 "write -P 0x2qemu-io ide0-hd0 "write -P 0x22qemu-io ide0-hd0 "write -P 0x22 qemu-io ide0-hd0 "write -P 0x22 0qemu-io ide0-hd0 "write -P 0x22 0 qemu-io ide0-hd0 "write -P 0x22 0 4qemu-io ide0-hd0 "write -P 0x22 0 4kqemu-io ide0-hd0 "write -P 0x22 0 4k"
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
(qemu) qququiquit
read 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
Testing: -drive file=TEST_DIR/t.qcow2,snapshot=off
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) qqeqemqemuqemu-qemu-iqemu-ioqemu-io qemu-io iqemu-io idqemu-io ideqemu-io ide0qemu-io ide0-qemu-io ide0-hqemu-io ide0-hdqemu-io ide0-hd0qemu-io ide0-hd0 qemu-io ide0-hd0 "qemu-io ide0-hd0 "wqemu-io ide0-hd0 "wrqemu-io ide0-hd0 "wriqemu-io ide0-hd0 "writqemu-io ide0-hd0 "writeqemu-io ide0-hd0 "write qemu-io ide0-hd0 "write -qemu-io ide0-hd0 "write -Pqemu-io ide0-hd0 "write -P qemu-io ide0-hd0 "write -P 0qemu-io ide0-hd0 "write -P 0xqemu-io ide0-hd0 "write -P 0x2qemu-io ide0-hd0 "write -P 0x22qemu-io ide0-hd0 "write -P 0x22 qemu-io ide0-hd0 "write -P 0x22 0qemu-io ide0-hd0 "write -P 0x22 0 qemu-io ide0-hd0 "write -P 0x22 0 4qemu-io ide0-hd0 "write -P 0x22 0 4kqemu-io ide0-hd0 "write -P 0x22 0 4k"
wrote 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
(qemu) qququiquit
read 4096/4096 bytes at offset 0
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
*** done *** done

View File

@ -63,6 +63,7 @@ class TestSingleDrive(iotests.QMPTestCase):
def test_pause(self): def test_pause(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
self.vm.pause_drive('drive0')
result = self.vm.qmp('drive-backup', device='drive0', result = self.vm.qmp('drive-backup', device='drive0',
target=target_img, sync='full') target=target_img, sync='full')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -70,6 +71,7 @@ class TestSingleDrive(iotests.QMPTestCase):
result = self.vm.qmp('block-job-pause', device='drive0') result = self.vm.qmp('block-job-pause', device='drive0')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
self.vm.resume_drive('drive0')
time.sleep(1) time.sleep(1)
result = self.vm.qmp('query-block-jobs') result = self.vm.qmp('query-block-jobs')
offset = self.dictpath(result, 'return[0]/offset') offset = self.dictpath(result, 'return[0]/offset')
@ -113,6 +115,7 @@ class TestSetSpeed(iotests.QMPTestCase):
def setUp(self): def setUp(self):
qemu_img('create', '-f', iotests.imgfmt, test_img, str(TestSetSpeed.image_len)) qemu_img('create', '-f', iotests.imgfmt, test_img, str(TestSetSpeed.image_len))
qemu_io('-c', 'write -P1 0 512', test_img)
self.vm = iotests.VM().add_drive(test_img) self.vm = iotests.VM().add_drive(test_img)
self.vm.launch() self.vm.launch()
@ -124,6 +127,7 @@ class TestSetSpeed(iotests.QMPTestCase):
def test_set_speed(self): def test_set_speed(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
self.vm.pause_drive('drive0')
result = self.vm.qmp('drive-backup', device='drive0', result = self.vm.qmp('drive-backup', device='drive0',
target=target_img, sync='full') target=target_img, sync='full')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -141,10 +145,11 @@ class TestSetSpeed(iotests.QMPTestCase):
self.assert_qmp(result, 'return[0]/device', 'drive0') self.assert_qmp(result, 'return[0]/device', 'drive0')
self.assert_qmp(result, 'return[0]/speed', 8 * 1024 * 1024) self.assert_qmp(result, 'return[0]/speed', 8 * 1024 * 1024)
event = self.cancel_and_wait() event = self.cancel_and_wait(resume=True)
self.assert_qmp(event, 'data/type', 'backup') self.assert_qmp(event, 'data/type', 'backup')
# Check setting speed in drive-backup works # Check setting speed in drive-backup works
self.vm.pause_drive('drive0')
result = self.vm.qmp('drive-backup', device='drive0', result = self.vm.qmp('drive-backup', device='drive0',
target=target_img, sync='full', speed=4*1024*1024) target=target_img, sync='full', speed=4*1024*1024)
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -153,7 +158,7 @@ class TestSetSpeed(iotests.QMPTestCase):
self.assert_qmp(result, 'return[0]/device', 'drive0') self.assert_qmp(result, 'return[0]/device', 'drive0')
self.assert_qmp(result, 'return[0]/speed', 4 * 1024 * 1024) self.assert_qmp(result, 'return[0]/speed', 4 * 1024 * 1024)
event = self.cancel_and_wait() event = self.cancel_and_wait(resume=True)
self.assert_qmp(event, 'data/type', 'backup') self.assert_qmp(event, 'data/type', 'backup')
def test_set_speed_invalid(self): def test_set_speed_invalid(self):
@ -165,6 +170,7 @@ class TestSetSpeed(iotests.QMPTestCase):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
self.vm.pause_drive('drive0')
result = self.vm.qmp('drive-backup', device='drive0', result = self.vm.qmp('drive-backup', device='drive0',
target=target_img, sync='full') target=target_img, sync='full')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
@ -172,7 +178,7 @@ class TestSetSpeed(iotests.QMPTestCase):
result = self.vm.qmp('block-job-set-speed', device='drive0', speed=-1) result = self.vm.qmp('block-job-set-speed', device='drive0', speed=-1)
self.assert_qmp(result, 'error/class', 'GenericError') self.assert_qmp(result, 'error/class', 'GenericError')
event = self.cancel_and_wait() event = self.cancel_and_wait(resume=True)
self.assert_qmp(event, 'data/type', 'backup') self.assert_qmp(event, 'data/type', 'backup')
class TestSingleTransaction(iotests.QMPTestCase): class TestSingleTransaction(iotests.QMPTestCase):
@ -214,6 +220,7 @@ class TestSingleTransaction(iotests.QMPTestCase):
def test_pause(self): def test_pause(self):
self.assert_no_active_block_jobs() self.assert_no_active_block_jobs()
self.vm.pause_drive('drive0')
result = self.vm.qmp('transaction', actions=[{ result = self.vm.qmp('transaction', actions=[{
'type': 'drive-backup', 'type': 'drive-backup',
'data': { 'device': 'drive0', 'data': { 'device': 'drive0',
@ -226,6 +233,7 @@ class TestSingleTransaction(iotests.QMPTestCase):
result = self.vm.qmp('block-job-pause', device='drive0') result = self.vm.qmp('block-job-pause', device='drive0')
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
self.vm.resume_drive('drive0')
time.sleep(1) time.sleep(1)
result = self.vm.qmp('query-block-jobs') result = self.vm.qmp('query-block-jobs')
offset = self.dictpath(result, 'return[0]/offset') offset = self.dictpath(result, 'return[0]/offset')

View File

@ -75,6 +75,11 @@ echo
echo "=== Testing monolithicFlat with zeroed_grain ===" echo "=== Testing monolithicFlat with zeroed_grain ==="
IMGOPTS="subformat=monolithicFlat,zeroed_grain=on" _make_test_img 2G IMGOPTS="subformat=monolithicFlat,zeroed_grain=on" _make_test_img 2G
echo
echo "=== Testing version 3 ==="
_use_sample_img iotest-version3.vmdk.bz2
_img_info
# success, all done # success, all done
echo "*** done" echo "*** done"
rm -f $seq.full rm -f $seq.full

View File

@ -25,4 +25,9 @@ virtual size: 2.0G (2147483648 bytes)
=== Testing monolithicFlat with zeroed_grain === === Testing monolithicFlat with zeroed_grain ===
qemu-img: TEST_DIR/t.IMGFMT: Flat image can't enable zeroed grain qemu-img: TEST_DIR/t.IMGFMT: Flat image can't enable zeroed grain
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648 Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=2147483648
=== Testing version 3 ===
image: TEST_DIR/iotest-version3.IMGFMT
file format: IMGFMT
virtual size: 1.0G (1073741824 bytes)
*** done *** done

View File

@ -149,7 +149,8 @@ _filter_win32()
# sanitize qemu-io output # sanitize qemu-io output
_filter_qemu_io() _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" # replace occurrences of QEMU_PROG with "qemu"

View File

@ -107,6 +107,19 @@ def add_drive(self, path, opts=''):
self._num_drives += 1 self._num_drives += 1
return self return self
def pause_drive(self, drive, event=None):
'''Pause drive r/w operations'''
if not event:
self.pause_drive(drive, "read_aio")
self.pause_drive(drive, "write_aio")
return
self.qmp('human-monitor-command',
command_line='qemu-io %s "break %s bp_%s"' % (drive, event, drive))
def resume_drive(self, drive):
self.qmp('human-monitor-command',
command_line='qemu-io %s "remove_break bp_%s"' % (drive, drive))
def hmp_qemu_io(self, drive, cmd): def hmp_qemu_io(self, drive, cmd):
'''Write to a given drive using an HMP command''' '''Write to a given drive using an HMP command'''
return self.qmp('human-monitor-command', return self.qmp('human-monitor-command',
@ -222,11 +235,14 @@ def assert_no_active_block_jobs(self):
result = self.vm.qmp('query-block-jobs') result = self.vm.qmp('query-block-jobs')
self.assert_qmp(result, 'return', []) self.assert_qmp(result, 'return', [])
def cancel_and_wait(self, drive='drive0', force=False): def cancel_and_wait(self, drive='drive0', force=False, resume=False):
'''Cancel a block job and wait for it to finish, returning the event''' '''Cancel a block job and wait for it to finish, returning the event'''
result = self.vm.qmp('block-job-cancel', device=drive, force=force) result = self.vm.qmp('block-job-cancel', device=drive, force=force)
self.assert_qmp(result, 'return', {}) self.assert_qmp(result, 'return', {})
if resume:
self.vm.resume_drive(drive)
cancelled = False cancelled = False
result = None result = None
while not cancelled: while not cancelled:

View File

@ -150,6 +150,59 @@ static void test_lifecycle(void)
g_assert(done); /* expect done to be true (second time) */ g_assert(done); /* expect done to be true (second time) */
} }
#define RECORD_SIZE 10 /* Leave some room for expansion */
struct coroutine_position {
int func;
int state;
};
static struct coroutine_position records[RECORD_SIZE];
static unsigned record_pos;
static void record_push(int func, int state)
{
struct coroutine_position *cp = &records[record_pos++];
g_assert_cmpint(record_pos, <, RECORD_SIZE);
cp->func = func;
cp->state = state;
}
static void coroutine_fn co_order_test(void *opaque)
{
record_push(2, 1);
g_assert(qemu_in_coroutine());
qemu_coroutine_yield();
record_push(2, 2);
g_assert(qemu_in_coroutine());
}
static void do_order_test(void)
{
Coroutine *co;
co = qemu_coroutine_create(co_order_test);
record_push(1, 1);
qemu_coroutine_enter(co, NULL);
record_push(1, 2);
g_assert(!qemu_in_coroutine());
qemu_coroutine_enter(co, NULL);
record_push(1, 3);
g_assert(!qemu_in_coroutine());
}
static void test_order(void)
{
int i;
const struct coroutine_position expected_pos[] = {
{1, 1,}, {2, 1}, {1, 2}, {2, 2}, {1, 3}
};
do_order_test();
g_assert_cmpint(record_pos, ==, 5);
for (i = 0; i < record_pos; i++) {
g_assert_cmpint(records[i].func , ==, expected_pos[i].func );
g_assert_cmpint(records[i].state, ==, expected_pos[i].state);
}
}
/* /*
* Lifecycle benchmark * Lifecycle benchmark
*/ */
@ -243,6 +296,7 @@ int main(int argc, char **argv)
g_test_add_func("/basic/nesting", test_nesting); g_test_add_func("/basic/nesting", test_nesting);
g_test_add_func("/basic/self", test_self); g_test_add_func("/basic/self", test_self);
g_test_add_func("/basic/in_coroutine", test_in_coroutine); g_test_add_func("/basic/in_coroutine", test_in_coroutine);
g_test_add_func("/basic/order", test_order);
if (g_test_perf()) { if (g_test_perf()) {
g_test_add_func("/perf/lifecycle", perf_lifecycle); g_test_add_func("/perf/lifecycle", perf_lifecycle);
g_test_add_func("/perf/nesting", perf_nesting); g_test_add_func("/perf/nesting", perf_nesting);

View File

@ -27,6 +27,7 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
{ {
Error *err; Error *err;
va_list ap; va_list ap;
int saved_errno = errno;
if (errp == NULL) { if (errp == NULL) {
return; return;
@ -41,6 +42,8 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...)
err->err_class = err_class; err->err_class = err_class;
*errp = err; *errp = err;
errno = saved_errno;
} }
void error_set_errno(Error **errp, int os_errno, ErrorClass err_class, void error_set_errno(Error **errp, int os_errno, ErrorClass err_class,
@ -49,6 +52,7 @@ void error_set_errno(Error **errp, int os_errno, ErrorClass err_class,
Error *err; Error *err;
char *msg1; char *msg1;
va_list ap; va_list ap;
int saved_errno = errno;
if (errp == NULL) { if (errp == NULL) {
return; return;
@ -69,6 +73,8 @@ void error_set_errno(Error **errp, int os_errno, ErrorClass err_class,
err->err_class = err_class; err->err_class = err_class;
*errp = err; *errp = err;
errno = saved_errno;
} }
void error_setg_file_open(Error **errp, int os_errno, const char *filename) void error_setg_file_open(Error **errp, int os_errno, const char *filename)