mirror of https://gitee.com/openkylin/qemu.git
Block patches from 2015-12-23 until 2016-01-07.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAABCAAGBQJWjuqwAAoJEDuxQgLoOKytznIH/Ap0ldYSdwBouhZkpKRDwIwf 5/9skIgwuDJ2DeGDqAcVEC4Nxq9HuUCz7DcXPAiTfFRM7ccpnSJJ5O0vfTuC353t 59h1JYh2kLDLXEm4RdylLMeuLNGuc+avUtWGVVQOrjFmSQAO7z3nexmoNRL6ccqE Cd/Oe1I2QU65p/4YpyslKg0N8A/WrHjOsf58Coo2ZCGNh3GLCNuE5mpofXBeSfWB bFdaq2Uv9x3F+vVq5zx3iNt2J8kHXlwZBEEYACzs+2j7j7O5TedjHDjgBrirbxl/ C3F8d+4JqhzAP141yZMO35z1hbehCaKddDZRuN8ryeMXSnBLU3hP9wm4Y1HLrJc= =bxBe -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/maxreitz/tags/pull-block-for-peter-2016-01-07' into staging Block patches from 2015-12-23 until 2016-01-07. # gpg: Signature made Thu 07 Jan 2016 22:46:08 GMT using RSA key ID E838ACAD # gpg: Good signature from "Max Reitz <mreitz@redhat.com>" * remotes/maxreitz/tags/pull-block-for-peter-2016-01-07: (21 commits) iotests: Add test cases for blockdev-mirror qmp: Add blockdev-mirror command block: Add check on mirror target block: Extract blockdev part of qmp_drive_mirror block: Rename BLOCK_OP_TYPE_MIRROR to BLOCK_OP_TYPE_MIRROR_SOURCE qemu-iotests: s390x: fix test 051 iotests: 095: Filter _img_info output iotests: 095: Use TEST_IMG override instead of "mv" iotests: 050: Use TEST_IMG override instead of "mv" iotests: 038: Use TEST_IMG override instead of "mv" iotests: 037: Use TEST_IMG override instead of "mv" iotests: 034: Use TEST_IMG override instead of "mv" iotests: 028: Use TEST_IMG override instead of "mv" iotests: 024: Use TEST_IMG override instead of "mv" iotests: 020: Use TEST_IMG override instead of "mv" iotests: 019: Use TEST_IMG override instead of "mv" iotests: 018: Use TEST_IMG override instead of "mv" block/qapi: Clear err for further error block: use drained section in bdrv_close qemu-iotests: make check-block.sh work on out-of-tree builds ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
d9767f1bfa
4
block.c
4
block.c
|
@ -2154,9 +2154,10 @@ void bdrv_close(BlockDriverState *bs)
|
|||
bdrv_io_limits_disable(bs);
|
||||
}
|
||||
|
||||
bdrv_drain(bs); /* complete I/O */
|
||||
bdrv_drained_begin(bs); /* complete I/O */
|
||||
bdrv_flush(bs);
|
||||
bdrv_drain(bs); /* in case flush left pending I/O */
|
||||
|
||||
notifier_list_notify(&bs->close_notifiers, bs);
|
||||
|
||||
if (bs->blk) {
|
||||
|
@ -2206,6 +2207,7 @@ void bdrv_close(BlockDriverState *bs)
|
|||
g_free(ban);
|
||||
}
|
||||
QLIST_INIT(&bs->aio_notifiers);
|
||||
bdrv_drained_end(bs);
|
||||
}
|
||||
|
||||
void bdrv_close_all(void)
|
||||
|
|
|
@ -250,6 +250,7 @@ void bdrv_query_image_info(BlockDriverState *bs,
|
|||
g_free(backing_filename2);
|
||||
backing_filename2 = NULL;
|
||||
error_free(err);
|
||||
err = NULL;
|
||||
}
|
||||
|
||||
/* Always report the full_backing_filename if present, even if it's the
|
||||
|
|
179
blockdev.c
179
blockdev.c
|
@ -3291,29 +3291,23 @@ void qmp_blockdev_backup(const char *device, const char *target,
|
|||
NULL, errp);
|
||||
}
|
||||
|
||||
void qmp_drive_mirror(const char *device, const char *target,
|
||||
bool has_format, const char *format,
|
||||
bool has_node_name, const char *node_name,
|
||||
bool has_replaces, const char *replaces,
|
||||
enum MirrorSyncMode sync,
|
||||
bool has_mode, enum NewImageMode mode,
|
||||
bool has_speed, int64_t speed,
|
||||
bool has_granularity, uint32_t granularity,
|
||||
bool has_buf_size, int64_t buf_size,
|
||||
bool has_on_source_error, BlockdevOnError on_source_error,
|
||||
bool has_on_target_error, BlockdevOnError on_target_error,
|
||||
bool has_unmap, bool unmap,
|
||||
Error **errp)
|
||||
/* Parameter check and block job starting for drive mirroring.
|
||||
* Caller should hold @device and @target's aio context (must be the same).
|
||||
**/
|
||||
static void blockdev_mirror_common(BlockDriverState *bs,
|
||||
BlockDriverState *target,
|
||||
bool has_replaces, const char *replaces,
|
||||
enum MirrorSyncMode sync,
|
||||
bool has_speed, int64_t speed,
|
||||
bool has_granularity, uint32_t granularity,
|
||||
bool has_buf_size, int64_t buf_size,
|
||||
bool has_on_source_error,
|
||||
BlockdevOnError on_source_error,
|
||||
bool has_on_target_error,
|
||||
BlockdevOnError on_target_error,
|
||||
bool has_unmap, bool unmap,
|
||||
Error **errp)
|
||||
{
|
||||
BlockBackend *blk;
|
||||
BlockDriverState *bs;
|
||||
BlockDriverState *source, *target_bs;
|
||||
AioContext *aio_context;
|
||||
Error *local_err = NULL;
|
||||
QDict *options;
|
||||
int flags;
|
||||
int64_t size;
|
||||
int ret;
|
||||
|
||||
if (!has_speed) {
|
||||
speed = 0;
|
||||
|
@ -3324,9 +3318,6 @@ void qmp_drive_mirror(const char *device, const char *target,
|
|||
if (!has_on_target_error) {
|
||||
on_target_error = BLOCKDEV_ON_ERROR_REPORT;
|
||||
}
|
||||
if (!has_mode) {
|
||||
mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
|
||||
}
|
||||
if (!has_granularity) {
|
||||
granularity = 0;
|
||||
}
|
||||
|
@ -3348,6 +3339,55 @@ void qmp_drive_mirror(const char *device, const char *target,
|
|||
return;
|
||||
}
|
||||
|
||||
if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_MIRROR_SOURCE, errp)) {
|
||||
return;
|
||||
}
|
||||
if (bdrv_op_is_blocked(target, BLOCK_OP_TYPE_MIRROR_TARGET, errp)) {
|
||||
return;
|
||||
}
|
||||
if (target->blk) {
|
||||
error_setg(errp, "Cannot mirror to an attached block device");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!bs->backing && sync == MIRROR_SYNC_MODE_TOP) {
|
||||
sync = MIRROR_SYNC_MODE_FULL;
|
||||
}
|
||||
|
||||
/* pass the node name to replace to mirror start since it's loose coupling
|
||||
* and will allow to check whether the node still exist at mirror completion
|
||||
*/
|
||||
mirror_start(bs, target,
|
||||
has_replaces ? replaces : NULL,
|
||||
speed, granularity, buf_size, sync,
|
||||
on_source_error, on_target_error, unmap,
|
||||
block_job_cb, bs, errp);
|
||||
}
|
||||
|
||||
void qmp_drive_mirror(const char *device, const char *target,
|
||||
bool has_format, const char *format,
|
||||
bool has_node_name, const char *node_name,
|
||||
bool has_replaces, const char *replaces,
|
||||
enum MirrorSyncMode sync,
|
||||
bool has_mode, enum NewImageMode mode,
|
||||
bool has_speed, int64_t speed,
|
||||
bool has_granularity, uint32_t granularity,
|
||||
bool has_buf_size, int64_t buf_size,
|
||||
bool has_on_source_error, BlockdevOnError on_source_error,
|
||||
bool has_on_target_error, BlockdevOnError on_target_error,
|
||||
bool has_unmap, bool unmap,
|
||||
Error **errp)
|
||||
{
|
||||
BlockDriverState *bs;
|
||||
BlockBackend *blk;
|
||||
BlockDriverState *source, *target_bs;
|
||||
AioContext *aio_context;
|
||||
Error *local_err = NULL;
|
||||
QDict *options = NULL;
|
||||
int flags;
|
||||
int64_t size;
|
||||
int ret;
|
||||
|
||||
blk = blk_by_name(device);
|
||||
if (!blk) {
|
||||
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
|
||||
|
@ -3363,15 +3403,14 @@ void qmp_drive_mirror(const char *device, const char *target,
|
|||
goto out;
|
||||
}
|
||||
bs = blk_bs(blk);
|
||||
if (!has_mode) {
|
||||
mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS;
|
||||
}
|
||||
|
||||
if (!has_format) {
|
||||
format = mode == NEW_IMAGE_MODE_EXISTING ? NULL : bs->drv->format_name;
|
||||
}
|
||||
|
||||
if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_MIRROR, errp)) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
flags = bs->open_flags | BDRV_O_RDWR;
|
||||
source = backing_bs(bs);
|
||||
if (!source && sync == MIRROR_SYNC_MODE_TOP) {
|
||||
|
@ -3466,22 +3505,78 @@ void qmp_drive_mirror(const char *device, const char *target,
|
|||
|
||||
bdrv_set_aio_context(target_bs, aio_context);
|
||||
|
||||
/* pass the node name to replace to mirror start since it's loose coupling
|
||||
* and will allow to check whether the node still exist at mirror completion
|
||||
*/
|
||||
mirror_start(bs, target_bs,
|
||||
has_replaces ? replaces : NULL,
|
||||
speed, granularity, buf_size, sync,
|
||||
on_source_error, on_target_error,
|
||||
unmap,
|
||||
block_job_cb, bs, &local_err);
|
||||
if (local_err != NULL) {
|
||||
bdrv_unref(target_bs);
|
||||
blockdev_mirror_common(bs, target_bs,
|
||||
has_replaces, replaces, sync,
|
||||
has_speed, speed,
|
||||
has_granularity, granularity,
|
||||
has_buf_size, buf_size,
|
||||
has_on_source_error, on_source_error,
|
||||
has_on_target_error, on_target_error,
|
||||
has_unmap, unmap,
|
||||
&local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
goto out;
|
||||
bdrv_unref(target_bs);
|
||||
}
|
||||
out:
|
||||
aio_context_release(aio_context);
|
||||
}
|
||||
|
||||
void qmp_blockdev_mirror(const char *device, const char *target,
|
||||
bool has_replaces, const char *replaces,
|
||||
MirrorSyncMode sync,
|
||||
bool has_speed, int64_t speed,
|
||||
bool has_granularity, uint32_t granularity,
|
||||
bool has_buf_size, int64_t buf_size,
|
||||
bool has_on_source_error,
|
||||
BlockdevOnError on_source_error,
|
||||
bool has_on_target_error,
|
||||
BlockdevOnError on_target_error,
|
||||
Error **errp)
|
||||
{
|
||||
BlockDriverState *bs;
|
||||
BlockBackend *blk;
|
||||
BlockDriverState *target_bs;
|
||||
AioContext *aio_context;
|
||||
Error *local_err = NULL;
|
||||
|
||||
blk = blk_by_name(device);
|
||||
if (!blk) {
|
||||
error_setg(errp, "Device '%s' not found", device);
|
||||
return;
|
||||
}
|
||||
bs = blk_bs(blk);
|
||||
|
||||
if (!bs) {
|
||||
error_setg(errp, "Device '%s' has no media", device);
|
||||
return;
|
||||
}
|
||||
|
||||
target_bs = bdrv_lookup_bs(target, target, errp);
|
||||
if (!target_bs) {
|
||||
return;
|
||||
}
|
||||
|
||||
aio_context = bdrv_get_aio_context(bs);
|
||||
aio_context_acquire(aio_context);
|
||||
|
||||
bdrv_ref(target_bs);
|
||||
bdrv_set_aio_context(target_bs, aio_context);
|
||||
|
||||
blockdev_mirror_common(bs, target_bs,
|
||||
has_replaces, replaces, sync,
|
||||
has_speed, speed,
|
||||
has_granularity, granularity,
|
||||
has_buf_size, buf_size,
|
||||
has_on_source_error, on_source_error,
|
||||
has_on_target_error, on_target_error,
|
||||
true, true,
|
||||
&local_err);
|
||||
if (local_err) {
|
||||
error_propagate(errp, local_err);
|
||||
bdrv_unref(target_bs);
|
||||
}
|
||||
|
||||
out:
|
||||
aio_context_release(aio_context);
|
||||
}
|
||||
|
||||
|
|
|
@ -195,7 +195,7 @@ void virtio_blk_data_plane_create(VirtIODevice *vdev, VirtIOBlkConf *conf,
|
|||
blk_op_unblock(conf->conf.blk, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT, s->blocker);
|
||||
blk_op_unblock(conf->conf.blk, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT_DELETE,
|
||||
s->blocker);
|
||||
blk_op_unblock(conf->conf.blk, BLOCK_OP_TYPE_MIRROR, s->blocker);
|
||||
blk_op_unblock(conf->conf.blk, BLOCK_OP_TYPE_MIRROR_SOURCE, s->blocker);
|
||||
blk_op_unblock(conf->conf.blk, BLOCK_OP_TYPE_STREAM, s->blocker);
|
||||
blk_op_unblock(conf->conf.blk, BLOCK_OP_TYPE_REPLACE, s->blocker);
|
||||
|
||||
|
|
|
@ -169,7 +169,8 @@ typedef enum BlockOpType {
|
|||
BLOCK_OP_TYPE_EXTERNAL_SNAPSHOT,
|
||||
BLOCK_OP_TYPE_INTERNAL_SNAPSHOT,
|
||||
BLOCK_OP_TYPE_INTERNAL_SNAPSHOT_DELETE,
|
||||
BLOCK_OP_TYPE_MIRROR,
|
||||
BLOCK_OP_TYPE_MIRROR_SOURCE,
|
||||
BLOCK_OP_TYPE_MIRROR_TARGET,
|
||||
BLOCK_OP_TYPE_RESIZE,
|
||||
BLOCK_OP_TYPE_STREAM,
|
||||
BLOCK_OP_TYPE_REPLACE,
|
||||
|
|
|
@ -1183,6 +1183,54 @@
|
|||
{ 'command': 'block-dirty-bitmap-clear',
|
||||
'data': 'BlockDirtyBitmap' }
|
||||
|
||||
##
|
||||
# @blockdev-mirror
|
||||
#
|
||||
# Start mirroring a block device's writes to a new destination.
|
||||
#
|
||||
# @device: the name of the device whose writes should be mirrored.
|
||||
#
|
||||
# @target: the id or node-name of the block device to mirror to. This mustn't be
|
||||
# attached to guest.
|
||||
#
|
||||
# @replaces: #optional with sync=full graph node name to be replaced by the new
|
||||
# image when a whole image copy is done. This can be used to repair
|
||||
# broken Quorum files.
|
||||
#
|
||||
# @speed: #optional the maximum speed, in bytes per second
|
||||
#
|
||||
# @sync: what parts of the disk image should be copied to the destination
|
||||
# (all the disk, only the sectors allocated in the topmost image, or
|
||||
# only new I/O).
|
||||
#
|
||||
# @granularity: #optional granularity of the dirty bitmap, default is 64K
|
||||
# if the image format doesn't have clusters, 4K if the clusters
|
||||
# are smaller than that, else the cluster size. Must be a
|
||||
# power of 2 between 512 and 64M
|
||||
#
|
||||
# @buf-size: #optional maximum amount of data in flight from source to
|
||||
# target
|
||||
#
|
||||
# @on-source-error: #optional the action to take on an error on the source,
|
||||
# default 'report'. 'stop' and 'enospc' can only be used
|
||||
# if the block device supports io-status (see BlockInfo).
|
||||
#
|
||||
# @on-target-error: #optional the action to take on an error on the target,
|
||||
# default 'report' (no limitations, since this applies to
|
||||
# a different block device than @device).
|
||||
#
|
||||
# Returns: nothing on success.
|
||||
#
|
||||
# Since 2.6
|
||||
##
|
||||
{ 'command': 'blockdev-mirror',
|
||||
'data': { 'device': 'str', 'target': 'str',
|
||||
'*replaces': 'str',
|
||||
'sync': 'MirrorSyncMode',
|
||||
'*speed': 'int', '*granularity': 'uint32',
|
||||
'*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
|
||||
'*on-target-error': 'BlockdevOnError' } }
|
||||
|
||||
##
|
||||
# @block_set_io_throttle:
|
||||
#
|
||||
|
|
|
@ -1635,7 +1635,7 @@ Arguments:
|
|||
- "speed": maximum speed of the streaming job, in bytes per second
|
||||
(json-int)
|
||||
- "granularity": granularity of the dirty bitmap, in bytes (json-int, optional)
|
||||
- "buf_size": maximum amount of data in flight from source to target, in bytes
|
||||
- "buf-size": maximum amount of data in flight from source to target, in bytes
|
||||
(json-int, default 10M)
|
||||
- "sync": what parts of the disk image should be copied to the destination;
|
||||
possibilities include "full" for all the disk, "top" for only the sectors
|
||||
|
@ -1664,6 +1664,54 @@ Example:
|
|||
|
||||
EQMP
|
||||
|
||||
{
|
||||
.name = "blockdev-mirror",
|
||||
.args_type = "sync:s,device:B,target:B,replaces:s?,speed:i?,"
|
||||
"on-source-error:s?,on-target-error:s?,"
|
||||
"granularity:i?,buf-size:i?",
|
||||
.mhandler.cmd_new = qmp_marshal_blockdev_mirror,
|
||||
},
|
||||
|
||||
SQMP
|
||||
blockdev-mirror
|
||||
------------
|
||||
|
||||
Start mirroring a block device's writes to another block device. target
|
||||
specifies the target of mirror operation.
|
||||
|
||||
Arguments:
|
||||
|
||||
- "device": device name to operate on (json-string)
|
||||
- "target": device name to mirror to (json-string)
|
||||
- "replaces": the block driver node name to replace when finished
|
||||
(json-string, optional)
|
||||
- "speed": maximum speed of the streaming job, in bytes per second
|
||||
(json-int)
|
||||
- "granularity": granularity of the dirty bitmap, in bytes (json-int, optional)
|
||||
- "buf_size": maximum amount of data in flight from source to target, in bytes
|
||||
(json-int, default 10M)
|
||||
- "sync": what parts of the disk image should be copied to the destination;
|
||||
possibilities include "full" for all the disk, "top" for only the sectors
|
||||
allocated in the topmost image, or "none" to only replicate new I/O
|
||||
(MirrorSyncMode).
|
||||
- "on-source-error": the action to take on an error on the source
|
||||
(BlockdevOnError, default 'report')
|
||||
- "on-target-error": the action to take on an error on the target
|
||||
(BlockdevOnError, default 'report')
|
||||
|
||||
The default value of the granularity is the image cluster size clamped
|
||||
between 4096 and 65536, if the image format defines one. If the format
|
||||
does not define a cluster size, the default value of the granularity
|
||||
is 65536.
|
||||
|
||||
Example:
|
||||
|
||||
-> { "execute": "blockdev-mirror", "arguments": { "device": "ide-hd0",
|
||||
"target": "target0",
|
||||
"sync": "full" } }
|
||||
<- { "return": {} }
|
||||
|
||||
EQMP
|
||||
{
|
||||
.name = "change-backing-file",
|
||||
.args_type = "device:s,image-node-name:s,backing-file:s",
|
||||
|
|
|
@ -9,7 +9,7 @@ if [ ! -x $QEMU_PROG ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
cd $SRC_PATH/tests/qemu-iotests
|
||||
cd tests/qemu-iotests
|
||||
|
||||
ret=0
|
||||
./check -T -nocache -raw || ret=1
|
||||
|
|
|
@ -66,8 +66,8 @@ _check_test_img
|
|||
echo "Creating test image with backing file"
|
||||
echo
|
||||
|
||||
TEST_IMG=$TEST_IMG_SAVE
|
||||
_make_test_img -b "$TEST_IMG.base" 6G
|
||||
TEST_IMG="$TEST_IMG_SAVE.orig"
|
||||
_make_test_img -b "$TEST_IMG_SAVE.base" 6G
|
||||
|
||||
echo "Filling test image"
|
||||
echo
|
||||
|
@ -81,8 +81,8 @@ for offset in $TEST_OFFSETS; do
|
|||
done
|
||||
_check_test_img
|
||||
|
||||
mv "$TEST_IMG" "$TEST_IMG.orig"
|
||||
$QEMU_IMG convert -O $IMGFMT "$TEST_IMG.orig" "$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
$QEMU_IMG convert -f $IMGFMT -O $IMGFMT "$TEST_IMG.orig" "$TEST_IMG"
|
||||
|
||||
echo "Reading"
|
||||
echo
|
||||
|
|
|
@ -269,7 +269,7 @@ wrote 65536/65536 bytes at offset 4295032832
|
|||
No errors were found on the image.
|
||||
Creating test image with backing file
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT.orig', fmt=IMGFMT size=6442450944 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Filling test image
|
||||
|
||||
=== IO: pattern 1
|
||||
|
|
|
@ -54,6 +54,9 @@ _unsupported_imgopts "subformat=monolithicFlat" \
|
|||
TEST_OFFSETS="0 4294967296"
|
||||
CLUSTER_SIZE=65536
|
||||
|
||||
TEST_IMG_SAVE="$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.base"
|
||||
|
||||
_make_test_img 6G
|
||||
|
||||
echo "Filling base image"
|
||||
|
@ -71,8 +74,8 @@ _check_test_img
|
|||
echo "Creating test image with backing file"
|
||||
echo
|
||||
|
||||
mv "$TEST_IMG" "$TEST_IMG.base"
|
||||
_make_test_img -b "$TEST_IMG.base" 6G
|
||||
TEST_IMG="$TEST_IMG_SAVE.orig"
|
||||
_make_test_img -b "$TEST_IMG_SAVE.base" 6G
|
||||
|
||||
echo "Filling test image"
|
||||
echo
|
||||
|
@ -86,9 +89,7 @@ for offset in $TEST_OFFSETS; do
|
|||
done
|
||||
_check_test_img
|
||||
|
||||
mv "$TEST_IMG" "$TEST_IMG.orig"
|
||||
|
||||
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
|
||||
# Test the conversion twice: One test with the old-style -B option and another
|
||||
# one with -o backing_file
|
||||
|
@ -98,7 +99,7 @@ for backing_option in "-B " "-o backing_file="; do
|
|||
echo
|
||||
echo Testing conversion with $backing_option"$TEST_IMG.base" | _filter_testdir | _filter_imgfmt
|
||||
echo
|
||||
$QEMU_IMG convert -O $IMGFMT $backing_option"$TEST_IMG.base" "$TEST_IMG.orig" "$TEST_IMG"
|
||||
$QEMU_IMG convert -f $IMGFMT -O $IMGFMT $backing_option"$TEST_IMG.base" "$TEST_IMG.orig" "$TEST_IMG"
|
||||
|
||||
echo "Checking if backing clusters are allocated when they shouldn't"
|
||||
echo
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
QA output created by 019
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=6442450944
|
||||
Filling base image
|
||||
|
||||
=== IO: pattern 42
|
||||
|
@ -269,7 +269,7 @@ wrote 65536/65536 bytes at offset 4296015872
|
|||
No errors were found on the image.
|
||||
Creating test image with backing file
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT.orig', fmt=IMGFMT size=6442450944 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Filling test image
|
||||
|
||||
=== IO: pattern 43
|
||||
|
|
|
@ -56,6 +56,9 @@ fi
|
|||
|
||||
TEST_OFFSETS="0 4294967296"
|
||||
|
||||
TEST_IMG_SAVE="$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.base"
|
||||
|
||||
_make_test_img 6G
|
||||
|
||||
echo "Filling base image"
|
||||
|
@ -73,7 +76,7 @@ _check_test_img
|
|||
echo "Creating test image with backing file"
|
||||
echo
|
||||
|
||||
mv "$TEST_IMG" "$TEST_IMG.base"
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
_make_test_img -b "$TEST_IMG.base" 6G
|
||||
|
||||
echo "Filling test image"
|
||||
|
@ -89,7 +92,7 @@ done
|
|||
_check_test_img
|
||||
|
||||
$QEMU_IMG commit "$TEST_IMG"
|
||||
mv "$TEST_IMG.base" "$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.base"
|
||||
|
||||
echo "Reading from the backing file"
|
||||
echo
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
QA output created by 020
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=6442450944
|
||||
Filling base image
|
||||
|
||||
=== IO: pattern 0
|
||||
|
|
|
@ -60,16 +60,22 @@ CLUSTER_SIZE=65536
|
|||
echo "Creating backing file"
|
||||
echo
|
||||
|
||||
TEST_IMG_SAVE="$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.base_old"
|
||||
|
||||
_make_test_img 1G
|
||||
io_pattern writev 0 $CLUSTER_SIZE $((2 * CLUSTER_SIZE)) 8 0x11
|
||||
mv "$TEST_IMG" "$TEST_IMG.base_old"
|
||||
|
||||
TEST_IMG="$TEST_IMG_SAVE.base_new"
|
||||
|
||||
echo "Creating new backing file"
|
||||
echo
|
||||
|
||||
_make_test_img 1G
|
||||
io_pattern writev 0 $((2 * CLUSTER_SIZE)) $((4 * CLUSTER_SIZE)) 4 0x22
|
||||
mv "$TEST_IMG" "$TEST_IMG.base_new"
|
||||
|
||||
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
|
||||
echo "Creating COW image"
|
||||
echo
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
QA output created by 024
|
||||
Creating backing file
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base_old', fmt=IMGFMT size=1073741824
|
||||
=== IO: pattern 0x11
|
||||
wrote 65536/65536 bytes at offset 0
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
@ -21,7 +21,7 @@ wrote 65536/65536 bytes at offset 917504
|
|||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Creating new backing file
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base_new', fmt=IMGFMT size=1073741824
|
||||
=== IO: pattern 0x22
|
||||
wrote 131072/131072 bytes at offset 0
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
|
|
@ -60,6 +60,9 @@ base_size=$(( image_size - 1024 * 1024 * 1024 ))
|
|||
|
||||
offset=$(( base_size - 32 * 1024 ))
|
||||
|
||||
TEST_IMG_SAVE="$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.base"
|
||||
|
||||
_make_test_img $base_size
|
||||
|
||||
echo "Filling base image"
|
||||
|
@ -73,7 +76,7 @@ _check_test_img
|
|||
echo "Creating test image with backing file"
|
||||
echo
|
||||
|
||||
mv "$TEST_IMG" "$TEST_IMG.base"
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
_make_test_img -b "$TEST_IMG.base" $image_size
|
||||
|
||||
echo "Filling test image"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
QA output created by 028
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=3221227008
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=3221227008
|
||||
Filling base image
|
||||
|
||||
=== IO: pattern 195
|
||||
|
|
|
@ -51,9 +51,13 @@ size=128M
|
|||
echo
|
||||
echo "== creating backing file for COW tests =="
|
||||
|
||||
TEST_IMG_SAVE="$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.base"
|
||||
|
||||
_make_test_img $size
|
||||
$QEMU_IO -c "write -P 0x55 0 1M" "$TEST_IMG" | _filter_qemu_io
|
||||
mv "$TEST_IMG" "$TEST_IMG.base"
|
||||
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
|
||||
_make_test_img -b "$TEST_IMG.base" 6G
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
QA output created by 034
|
||||
|
||||
== creating backing file for COW tests ==
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
||||
wrote 1048576/1048576 bytes at offset 0
|
||||
1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=6442450944 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
|
|
|
@ -51,6 +51,9 @@ size=128M
|
|||
echo
|
||||
echo "== creating backing file for COW tests =="
|
||||
|
||||
TEST_IMG_SAVE="$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.base"
|
||||
|
||||
_make_test_img $size
|
||||
|
||||
function backing_io()
|
||||
|
@ -71,7 +74,7 @@ function backing_io()
|
|||
|
||||
backing_io 0 256 write | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
|
||||
|
||||
mv "$TEST_IMG" "$TEST_IMG.base"
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
|
||||
_make_test_img -b "$TEST_IMG.base" 6G
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
QA output created by 037
|
||||
|
||||
== creating backing file for COW tests ==
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
||||
wrote 512/512 bytes at offset 0
|
||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 512/512 bytes at offset 512
|
||||
|
|
|
@ -48,6 +48,9 @@ size=128M
|
|||
echo
|
||||
echo "== creating backing file for COW tests =="
|
||||
|
||||
TEST_IMG_SAVE="$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.base"
|
||||
|
||||
_make_test_img $size
|
||||
|
||||
function backing_io()
|
||||
|
@ -68,7 +71,7 @@ function backing_io()
|
|||
|
||||
backing_io 0 256 write | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
|
||||
|
||||
mv "$TEST_IMG" "$TEST_IMG.base"
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
|
||||
_make_test_img -b "$TEST_IMG.base" 6G
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
QA output created by 038
|
||||
|
||||
== creating backing file for COW tests ==
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=134217728
|
||||
wrote 65536/65536 bytes at offset 0
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 65536
|
||||
|
|
|
@ -34,9 +34,11 @@ quorum_img3 = os.path.join(iotests.test_dir, 'quorum3.img')
|
|||
quorum_repair_img = os.path.join(iotests.test_dir, 'quorum_repair.img')
|
||||
quorum_snapshot_file = os.path.join(iotests.test_dir, 'quorum_snapshot.img')
|
||||
|
||||
|
||||
class TestSingleDrive(iotests.QMPTestCase):
|
||||
image_len = 1 * 1024 * 1024 # MB
|
||||
qmp_cmd = 'drive-mirror'
|
||||
qmp_target = target_img
|
||||
not_found_error = 'DeviceNotFound'
|
||||
|
||||
def setUp(self):
|
||||
iotests.create_image(backing_img, self.image_len)
|
||||
|
@ -58,8 +60,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
|||
def test_complete(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
target=target_img)
|
||||
result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
|
||||
target=self.qmp_target)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.complete_and_wait()
|
||||
|
@ -72,8 +74,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
|||
def test_cancel(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
target=target_img)
|
||||
result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
|
||||
target=self.qmp_target)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.cancel_and_wait(force=True)
|
||||
|
@ -84,8 +86,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
|||
def test_cancel_after_ready(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
target=target_img)
|
||||
result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
|
||||
target=self.qmp_target)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.wait_ready_and_cancel()
|
||||
|
@ -98,8 +100,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
|||
def test_pause(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
target=target_img)
|
||||
result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
|
||||
target=self.qmp_target)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
result = self.vm.qmp('block-job-pause', device='drive0')
|
||||
|
@ -125,8 +127,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
|||
self.assert_no_active_block_jobs()
|
||||
|
||||
# A small buffer is rounded up automatically
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
buf_size=4096, target=target_img)
|
||||
result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
|
||||
buf_size=4096, target=self.qmp_target)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.complete_and_wait()
|
||||
|
@ -141,8 +143,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
|||
|
||||
qemu_img('create', '-f', iotests.imgfmt, '-o', 'cluster_size=%d,size=%d'
|
||||
% (self.image_len, self.image_len), target_img)
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
buf_size=65536, mode='existing', target=target_img)
|
||||
result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
|
||||
buf_size=65536, mode='existing', target=self.qmp_target)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.complete_and_wait()
|
||||
|
@ -157,8 +159,8 @@ class TestSingleDrive(iotests.QMPTestCase):
|
|||
|
||||
qemu_img('create', '-f', iotests.imgfmt, '-o', 'cluster_size=%d,backing_file=%s'
|
||||
% (self.image_len, backing_img), target_img)
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
mode='existing', target=target_img)
|
||||
result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
|
||||
mode='existing', target=self.qmp_target)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
self.complete_and_wait()
|
||||
|
@ -172,30 +174,82 @@ class TestSingleDrive(iotests.QMPTestCase):
|
|||
if iotests.qemu_default_machine != 'pc':
|
||||
return
|
||||
|
||||
result = self.vm.qmp('drive-mirror', device='drive1', # CD-ROM
|
||||
sync='full', target=target_img)
|
||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||
result = self.vm.qmp(self.qmp_cmd, device='ide1-cd0', sync='full',
|
||||
target=self.qmp_target)
|
||||
self.assert_qmp(result, 'error/class', self.not_found_error)
|
||||
|
||||
def test_image_not_found(self):
|
||||
result = self.vm.qmp('drive-mirror', device='drive0', sync='full',
|
||||
mode='existing', target=target_img)
|
||||
result = self.vm.qmp(self.qmp_cmd, device='drive0', sync='full',
|
||||
mode='existing', target=self.qmp_target)
|
||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||
|
||||
def test_device_not_found(self):
|
||||
result = self.vm.qmp('drive-mirror', device='nonexistent', sync='full',
|
||||
target=target_img)
|
||||
self.assert_qmp(result, 'error/class', 'DeviceNotFound')
|
||||
result = self.vm.qmp(self.qmp_cmd, device='nonexistent', sync='full',
|
||||
target=self.qmp_target)
|
||||
self.assert_qmp(result, 'error/class', self.not_found_error)
|
||||
|
||||
class TestSingleBlockdev(TestSingleDrive):
|
||||
qmp_cmd = 'blockdev-mirror'
|
||||
qmp_target = 'node1'
|
||||
not_found_error = 'GenericError'
|
||||
|
||||
def setUp(self):
|
||||
TestSingleDrive.setUp(self)
|
||||
qemu_img('create', '-f', iotests.imgfmt, '-o', 'backing_file=%s' % backing_img, target_img)
|
||||
args = {'options':
|
||||
{'driver': iotests.imgfmt,
|
||||
'node-name': self.qmp_target,
|
||||
'file': { 'filename': target_img, 'driver': 'file' } } }
|
||||
result = self.vm.qmp("blockdev-add", **args)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
|
||||
test_large_cluster = None
|
||||
test_image_not_found = None
|
||||
test_small_buffer2 = None
|
||||
|
||||
class TestBlockdevAttached(iotests.QMPTestCase):
|
||||
image_len = 1 * 1024 * 1024 # MB
|
||||
|
||||
def setUp(self):
|
||||
iotests.create_image(backing_img, self.image_len)
|
||||
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, target_img)
|
||||
self.vm = iotests.VM().add_drive(test_img)
|
||||
self.vm.launch()
|
||||
|
||||
def tearDown(self):
|
||||
self.vm.shutdown()
|
||||
os.remove(test_img)
|
||||
os.remove(target_img)
|
||||
|
||||
def test_blockdev_attached(self):
|
||||
self.assert_no_active_block_jobs()
|
||||
args = {'options':
|
||||
{'driver': iotests.imgfmt,
|
||||
'id': 'drive1',
|
||||
'file': { 'filename': target_img, 'driver': 'file' } } }
|
||||
result = self.vm.qmp("blockdev-add", **args)
|
||||
self.assert_qmp(result, 'return', {})
|
||||
result = self.vm.qmp('blockdev-mirror', device='drive0', sync='full',
|
||||
target='drive1')
|
||||
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||
|
||||
class TestSingleDriveZeroLength(TestSingleDrive):
|
||||
image_len = 0
|
||||
test_small_buffer2 = None
|
||||
test_large_cluster = None
|
||||
|
||||
class TestSingleBlockdevZeroLength(TestSingleBlockdev):
|
||||
image_len = 0
|
||||
|
||||
class TestSingleDriveUnalignedLength(TestSingleDrive):
|
||||
image_len = 1025 * 1024
|
||||
test_small_buffer2 = None
|
||||
test_large_cluster = None
|
||||
|
||||
class TestSingleBlockdevUnalignedLength(TestSingleBlockdev):
|
||||
image_len = 1025 * 1024
|
||||
|
||||
class TestMirrorNoBacking(iotests.QMPTestCase):
|
||||
image_len = 2 * 1024 * 1024 # MB
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
......................................................
|
||||
............................................................................
|
||||
----------------------------------------------------------------------
|
||||
Ran 54 tests
|
||||
Ran 76 tests
|
||||
|
||||
OK
|
||||
|
|
|
@ -51,14 +51,19 @@ fi
|
|||
echo
|
||||
echo "== Creating images =="
|
||||
|
||||
TEST_IMG_SAVE="$TEST_IMG"
|
||||
TEST_IMG="$TEST_IMG.old"
|
||||
|
||||
size=10M
|
||||
_make_test_img $size
|
||||
$QEMU_IO -c "write -P 0x40 0 1048576" "$TEST_IMG" | _filter_qemu_io
|
||||
mv "$TEST_IMG" "$TEST_IMG.old"
|
||||
|
||||
TEST_IMG="$TEST_IMG_SAVE.new"
|
||||
|
||||
_make_test_img $size
|
||||
$QEMU_IO -c "write -P 0x5a 0 1048576" "$TEST_IMG" | _filter_qemu_io
|
||||
mv "$TEST_IMG" "$TEST_IMG.new"
|
||||
|
||||
TEST_IMG="$TEST_IMG_SAVE"
|
||||
|
||||
_make_test_img -b "$TEST_IMG.old" $size
|
||||
$QEMU_IO -c "write -z 0 1048576" "$TEST_IMG" | _filter_qemu_io
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
QA output created by 050
|
||||
|
||||
== Creating images ==
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=10485760
|
||||
Formatting 'TEST_DIR/t.IMGFMT.old', fmt=IMGFMT size=10485760
|
||||
wrote 1048576/1048576 bytes at offset 0
|
||||
1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=10485760
|
||||
Formatting 'TEST_DIR/t.IMGFMT.new', fmt=IMGFMT size=10485760
|
||||
wrote 1048576/1048576 bytes at offset 0
|
||||
1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=10485760 backing_file=TEST_DIR/t.IMGFMT.old
|
||||
|
|
|
@ -65,6 +65,7 @@ function run_qemu()
|
|||
}
|
||||
|
||||
size=128M
|
||||
device_id="drive0"
|
||||
|
||||
_make_test_img $size
|
||||
cp "$TEST_IMG" "$TEST_IMG.orig"
|
||||
|
@ -75,10 +76,10 @@ echo
|
|||
echo === Unknown option ===
|
||||
echo
|
||||
|
||||
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=
|
||||
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=on
|
||||
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=1234
|
||||
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=foo
|
||||
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=,if=none,id=$device_id
|
||||
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=on,if=none,id=$device_id
|
||||
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=1234,if=none,id=$device_id
|
||||
run_qemu -drive file="$TEST_IMG",format=qcow2,unknown_opt=foo,if=none,id=$device_id
|
||||
|
||||
echo
|
||||
echo === Unknown protocol option ===
|
||||
|
@ -108,7 +109,7 @@ echo
|
|||
echo === Overriding backing file ===
|
||||
echo
|
||||
|
||||
echo "info block" | run_qemu -drive file="$TEST_IMG",driver=qcow2,backing.file.filename="$TEST_IMG.orig" -nodefaults\
|
||||
echo "info block" | run_qemu -drive file="$TEST_IMG",driver=qcow2,backing.file.filename="$TEST_IMG.orig",if=none,id=$device_id -nodefaults\
|
||||
| _filter_generated_node_ids
|
||||
|
||||
# Drivers that don't support backing files
|
||||
|
@ -140,13 +141,19 @@ echo
|
|||
echo === No medium ===
|
||||
echo
|
||||
|
||||
run_qemu -drive if=floppy
|
||||
run_qemu -drive if=ide,media=cdrom
|
||||
run_qemu -drive if=scsi,media=cdrom
|
||||
case "$QEMU_DEFAULT_MACHINE" in
|
||||
pc)
|
||||
run_qemu -drive if=floppy
|
||||
run_qemu -drive if=ide,media=cdrom
|
||||
run_qemu -drive if=scsi,media=cdrom
|
||||
run_qemu -drive if=ide
|
||||
run_qemu -drive if=scsi
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
run_qemu -drive if=ide
|
||||
run_qemu -drive if=virtio
|
||||
run_qemu -drive if=scsi
|
||||
|
||||
case "$QEMU_DEFAULT_MACHINE" in
|
||||
pc)
|
||||
|
@ -171,13 +178,13 @@ case "$QEMU_DEFAULT_MACHINE" in
|
|||
run_qemu -drive file="$TEST_IMG",if=ide,media=cdrom,readonly=on
|
||||
run_qemu -drive file="$TEST_IMG",if=scsi,media=cdrom,readonly=on
|
||||
run_qemu -drive file="$TEST_IMG",if=ide,readonly=on
|
||||
run_qemu -drive file="$TEST_IMG",if=scsi,readonly=on
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
run_qemu -drive file="$TEST_IMG",if=virtio,readonly=on
|
||||
run_qemu -drive file="$TEST_IMG",if=scsi,readonly=on
|
||||
|
||||
case "$QEMU_DEFAULT_MACHINE" in
|
||||
pc)
|
||||
|
@ -211,7 +218,7 @@ run_qemu -drive driver=null-co,cache=invalid_value
|
|||
|
||||
for cache in writeback writethrough unsafe invalid_value; do
|
||||
echo -e "info block\ninfo block file\ninfo block backing\ninfo block backing-file" | \
|
||||
run_qemu -drive file="$TEST_IMG",cache=$cache,backing.file.filename="$TEST_IMG.base",backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
run_qemu -drive file="$TEST_IMG",cache=$cache,backing.file.filename="$TEST_IMG.base",backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=$device_id -nodefaults
|
||||
done
|
||||
|
||||
echo
|
||||
|
@ -277,7 +284,6 @@ echo
|
|||
|
||||
$QEMU_IO -c "write -P 0x11 0 4k" "$TEST_IMG" | _filter_qemu_io
|
||||
|
||||
device_id="drive0"
|
||||
|
||||
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="$TEST_IMG",if=none,id=$device_id -snapshot | _filter_qemu_io
|
||||
echo "qemu-io $device_id \"write -P 0x22 0 4k\"" | run_qemu -drive file="$TEST_IMG",snapshot=on,if=none,id=$device_id | _filter_qemu_io
|
||||
|
|
|
@ -4,17 +4,17 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/
|
|||
|
||||
=== Unknown option ===
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=: Block format 'qcow2' used by device 'virtio0' doesn't support the option 'unknown_opt'
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0: Block format 'qcow2' used by device 'drive0' doesn't support the option 'unknown_opt'
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on: Block format 'qcow2' used by device 'virtio0' doesn't support the option 'unknown_opt'
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0: Block format 'qcow2' used by device 'drive0' doesn't support the option 'unknown_opt'
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234: Block format 'qcow2' used by device 'virtio0' doesn't support the option 'unknown_opt'
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0: Block format 'qcow2' used by device 'drive0' doesn't support the option 'unknown_opt'
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo: Block format 'qcow2' used by device 'virtio0' doesn't support the option 'unknown_opt'
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0: Block format 'qcow2' used by device 'drive0' doesn't support the option 'unknown_opt'
|
||||
|
||||
|
||||
=== Unknown protocol option ===
|
||||
|
@ -56,10 +56,11 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
|||
|
||||
=== Overriding backing file ===
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig -nodefaults
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig,if=none,id=drive0 -nodefaults
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||
virtio0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
Removable device: not locked, tray closed
|
||||
Cache mode: writeback
|
||||
Backing file: TEST_DIR/t.qcow2.orig (chain depth: 1)
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
@ -107,35 +108,10 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
|||
|
||||
=== No medium ===
|
||||
|
||||
Testing: -drive if=floppy
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) Warning: Orphaned drive without device: id=floppy0,file=,if=floppy,bus=0,unit=0
|
||||
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive if=ide,media=cdrom
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) Warning: Orphaned drive without device: id=ide0-cd0,file=,if=ide,bus=0,unit=0
|
||||
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive if=scsi,media=cdrom
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) Warning: Orphaned drive without device: id=scsi0-cd0,file=,if=scsi,bus=0,unit=0
|
||||
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive if=ide
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) Warning: Orphaned drive without device: id=ide0-hd0,file=,if=ide,bus=0,unit=0
|
||||
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive if=virtio
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty
|
||||
|
||||
Testing: -drive if=scsi
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) Warning: Orphaned drive without device: id=scsi0-hd0,file=,if=scsi,bus=0,unit=0
|
||||
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
|
||||
=== Read-only ===
|
||||
|
||||
|
@ -143,11 +119,6 @@ Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on
|
|||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) Warning: Orphaned drive without device: id=scsi0-hd0,file=TEST_DIR/t.qcow2,if=scsi,bus=0,unit=0
|
||||
q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
|
||||
=== Cache modes ===
|
||||
|
||||
|
@ -174,10 +145,11 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
|||
Testing: -drive driver=null-co,cache=invalid_value
|
||||
QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||
ide0-hd0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
Removable device: not locked, tray closed
|
||||
Cache mode: writeback
|
||||
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K[D[D[D[D[D[D[D[D[D[Dinfo block [K[D[D[D[D[D[D[D[D[D[D[Dinfo block f[K[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fi[K[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fil[K[D[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block file[K
|
||||
|
@ -193,10 +165,11 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||
Cache mode: writeback, ignore flushes
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||
ide0-hd0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
Removable device: not locked, tray closed
|
||||
Cache mode: writethrough
|
||||
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K[D[D[D[D[D[D[D[D[D[Dinfo block [K[D[D[D[D[D[D[D[D[D[D[Dinfo block f[K[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fi[K[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fil[K[D[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block file[K
|
||||
|
@ -212,10 +185,11 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||
Cache mode: writeback, ignore flushes
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||
ide0-hd0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
Removable device: not locked, tray closed
|
||||
Cache mode: writeback, ignore flushes
|
||||
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K[D[D[D[D[D[D[D[D[D[Dinfo block [K[D[D[D[D[D[D[D[D[D[D[Dinfo block f[K[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fi[K[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fil[K[D[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block file[K
|
||||
|
@ -231,8 +205,8 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||
Cache mode: writeback, ignore flushes
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file: invalid cache option
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0: invalid cache option
|
||||
|
||||
|
||||
=== Specifying the protocol layer ===
|
||||
|
|
|
@ -4,17 +4,17 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728 backing_file=TEST_DIR/
|
|||
|
||||
=== Unknown option ===
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt'
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=,if=none,id=drive0: Block format 'qcow2' used by device 'drive0' doesn't support the option 'unknown_opt'
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt'
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=on,if=none,id=drive0: Block format 'qcow2' used by device 'drive0' doesn't support the option 'unknown_opt'
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt'
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=1234,if=none,id=drive0: Block format 'qcow2' used by device 'drive0' doesn't support the option 'unknown_opt'
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo: Block format 'qcow2' used by device 'ide0-hd0' doesn't support the option 'unknown_opt'
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,format=qcow2,unknown_opt=foo,if=none,id=drive0: Block format 'qcow2' used by device 'drive0' doesn't support the option 'unknown_opt'
|
||||
|
||||
|
||||
=== Unknown protocol option ===
|
||||
|
@ -56,10 +56,11 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
|||
|
||||
=== Overriding backing file ===
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig -nodefaults
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig,if=none,id=drive0 -nodefaults
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||
ide0-hd0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
Removable device: not locked, tray closed
|
||||
Cache mode: writeback
|
||||
Backing file: TEST_DIR/t.qcow2.orig (chain depth: 1)
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
@ -124,14 +125,14 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
|||
(qemu) QEMU_PROG: Device needs media, but drive is empty
|
||||
QEMU_PROG: Initialization of device ide-hd failed: Device initialization failed.
|
||||
|
||||
Testing: -drive if=virtio
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty
|
||||
|
||||
Testing: -drive if=scsi
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) QEMU_PROG: Initialization of device lsi53c895a failed: Device needs media, but drive is empty
|
||||
|
||||
Testing: -drive if=virtio
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) QEMU_PROG: -drive if=virtio: Device needs media, but drive is empty
|
||||
|
||||
Testing: -drive if=none,id=disk -device ide-cd,drive=disk
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
@ -178,11 +179,11 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
|||
(qemu) QEMU_PROG: Can't use a read-only drive
|
||||
QEMU_PROG: Initialization of device ide-hd failed: Device initialization failed.
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,if=scsi,readonly=on
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,if=virtio,readonly=on
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
|
@ -238,10 +239,11 @@ QEMU X.Y.Z monitor - type 'help' for more information
|
|||
Testing: -drive driver=null-co,cache=invalid_value
|
||||
QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||
ide0-hd0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
Removable device: not locked, tray closed
|
||||
Cache mode: writeback
|
||||
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K[D[D[D[D[D[D[D[D[D[Dinfo block [K[D[D[D[D[D[D[D[D[D[D[Dinfo block f[K[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fi[K[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fil[K[D[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block file[K
|
||||
|
@ -257,10 +259,11 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||
Cache mode: writeback, ignore flushes
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||
ide0-hd0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
Removable device: not locked, tray closed
|
||||
Cache mode: writethrough
|
||||
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K[D[D[D[D[D[D[D[D[D[Dinfo block [K[D[D[D[D[D[D[D[D[D[D[Dinfo block f[K[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fi[K[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fil[K[D[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block file[K
|
||||
|
@ -276,10 +279,11 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||
Cache mode: writeback, ignore flushes
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||
QEMU X.Y.Z monitor - type 'help' for more information
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K
|
||||
ide0-hd0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
|
||||
Removable device: not locked, tray closed
|
||||
Cache mode: writeback, ignore flushes
|
||||
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
|
||||
(qemu) i[K[Din[K[D[Dinf[K[D[D[Dinfo[K[D[D[D[Dinfo [K[D[D[D[D[Dinfo b[K[D[D[D[D[D[Dinfo bl[K[D[D[D[D[D[D[Dinfo blo[K[D[D[D[D[D[D[D[Dinfo bloc[K[D[D[D[D[D[D[D[D[Dinfo block[K[D[D[D[D[D[D[D[D[D[Dinfo block [K[D[D[D[D[D[D[D[D[D[D[Dinfo block f[K[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fi[K[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block fil[K[D[D[D[D[D[D[D[D[D[D[D[D[D[Dinfo block file[K
|
||||
|
@ -295,8 +299,8 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
|
|||
Cache mode: writeback, ignore flushes
|
||||
(qemu) q[K[Dqu[K[D[Dqui[K[D[D[Dquit[K
|
||||
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file -nodefaults
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file: invalid cache option
|
||||
Testing: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
|
||||
QEMU_PROG: -drive file=TEST_DIR/t.qcow2,cache=invalid_value,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.cache.writeback=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0: invalid cache option
|
||||
|
||||
|
||||
=== Specifying the protocol layer ===
|
||||
|
|
|
@ -38,7 +38,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
|
|||
. ./common.rc
|
||||
. ./common.filter
|
||||
|
||||
_supported_fmt qcow2
|
||||
_supported_fmt qcow2 raw
|
||||
_supported_proto file nfs
|
||||
_supported_os Linux
|
||||
|
||||
|
|
|
@ -50,17 +50,15 @@ _supported_os Linux
|
|||
size_smaller=5M
|
||||
size_larger=100M
|
||||
|
||||
_make_test_img $size_smaller
|
||||
mv "${TEST_IMG}" "${TEST_IMG}.base"
|
||||
TEST_IMG="$TEST_IMG.base" _make_test_img $size_smaller
|
||||
|
||||
_make_test_img -b "${TEST_IMG}.base" $size_larger
|
||||
mv "${TEST_IMG}" "${TEST_IMG}.snp1"
|
||||
TEST_IMG="$TEST_IMG.snp1" _make_test_img -b "$TEST_IMG.base" $size_larger
|
||||
|
||||
_make_test_img -b "${TEST_IMG}.snp1" $size_larger
|
||||
|
||||
echo
|
||||
echo "=== Base image info before commit and resize ==="
|
||||
TEST_IMG="${TEST_IMG}.base" _img_info
|
||||
TEST_IMG="${TEST_IMG}.base" _img_info | _filter_img_info
|
||||
|
||||
echo
|
||||
echo === Running QEMU Live Commit Test ===
|
||||
|
@ -78,7 +76,7 @@ _send_qemu_cmd $h "{ 'execute': 'block-commit',
|
|||
|
||||
echo
|
||||
echo "=== Base image info after commit and resize ==="
|
||||
TEST_IMG="${TEST_IMG}.base" _img_info
|
||||
TEST_IMG="${TEST_IMG}.base" _img_info | _filter_img_info
|
||||
|
||||
# success, all done
|
||||
echo "*** done"
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
QA output created by 095
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=5242880
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=104857600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=5242880
|
||||
Formatting 'TEST_DIR/t.IMGFMT.snp1', fmt=IMGFMT size=104857600 backing_file=TEST_DIR/t.IMGFMT.base
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=104857600 backing_file=TEST_DIR/t.IMGFMT.snp1
|
||||
|
||||
=== Base image info before commit and resize ===
|
||||
image: TEST_DIR/t.IMGFMT.base
|
||||
file format: IMGFMT
|
||||
virtual size: 5.0M (5242880 bytes)
|
||||
cluster_size: 65536
|
||||
|
||||
=== Running QEMU Live Commit Test ===
|
||||
|
||||
|
@ -19,5 +18,4 @@ cluster_size: 65536
|
|||
image: TEST_DIR/t.IMGFMT.base
|
||||
file format: IMGFMT
|
||||
virtual size: 100M (104857600 bytes)
|
||||
cluster_size: 65536
|
||||
*** done
|
||||
|
|
Loading…
Reference in New Issue