* [Qemu-devel] [PULL 00/17] Block patches
@ 2019-08-19 16:17 Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 01/17] LUKS: support preallocation Max Reitz
` (17 more replies)
0 siblings, 18 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
The following changes since commit 3fbd3405d2b0604ea530fc7a1828f19da1e95ff9:
Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-08-17' into staging (2019-08-19 14:14:09 +0100)
are available in the Git repository at:
https://github.com/XanClic/qemu.git tags/pull-block-2019-08-19
for you to fetch changes up to fa27c478102a6b5d1c6b02c005607ad9404b915f:
doc: Preallocation does not require writing zeroes (2019-08-19 17:13:26 +0200)
----------------------------------------------------------------
Block patches:
- preallocation=falloc/full support for LUKS
- Various minor fixes
----------------------------------------------------------------
Max Reitz (16):
qemu-img: Fix bdrv_has_zero_init() use in convert
mirror: Fix bdrv_has_zero_init() use
block: Add bdrv_has_zero_init_truncate()
block: Implement .bdrv_has_zero_init_truncate()
block: Use bdrv_has_zero_init_truncate()
qcow2: Fix .bdrv_has_zero_init()
vdi: Fix .bdrv_has_zero_init()
vhdx: Fix .bdrv_has_zero_init()
iotests: Convert to preallocated encrypted qcow2
iotests: Test convert -n to pre-filled image
iotests: Full mirror to existing non-zero image
vdi: Make block_status recurse for fixed images
vmdk: Make block_status recurse for flat extents
vpc: Do not return RAW from block_status
iotests: Fix 141 when run with qed
doc: Preallocation does not require writing zeroes
Maxim Levitsky (1):
LUKS: support preallocation
qapi/block-core.json | 15 +++++---
include/block/block.h | 1 +
include/block/block_int.h | 9 +++++
block.c | 21 +++++++++++
block/crypto.c | 30 ++++++++++++++--
block/file-posix.c | 1 +
block/file-win32.c | 1 +
block/gluster.c | 4 +++
block/mirror.c | 11 ++++--
block/nfs.c | 1 +
block/parallels.c | 2 +-
block/qcow2.c | 30 +++++++++++++++-
block/qed.c | 1 +
block/raw-format.c | 6 ++++
block/rbd.c | 1 +
block/sheepdog.c | 1 +
block/ssh.c | 1 +
block/vdi.c | 16 +++++++--
block/vhdx.c | 28 +++++++++++++--
block/vmdk.c | 3 ++
block/vpc.c | 2 +-
blockdev.c | 16 +++++++--
qemu-img.c | 11 ++++--
tests/test-block-iothread.c | 2 +-
docs/qemu-block-drivers.texi | 4 +--
qemu-img.texi | 4 +--
tests/qemu-iotests/041 | 62 +++++++++++++++++++++++++++++---
tests/qemu-iotests/041.out | 4 +--
tests/qemu-iotests/122 | 17 +++++++++
tests/qemu-iotests/122.out | 8 +++++
tests/qemu-iotests/141 | 9 +++--
tests/qemu-iotests/141.out | 5 ---
tests/qemu-iotests/188 | 20 ++++++++++-
tests/qemu-iotests/188.out | 4 +++
tests/qemu-iotests/common.filter | 5 +++
35 files changed, 313 insertions(+), 43 deletions(-)
--
2.21.0
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 01/17] LUKS: support preallocation
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 02/17] qemu-img: Fix bdrv_has_zero_init() use in convert Max Reitz
` (16 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
From: Maxim Levitsky <mlevitsk@redhat.com>
preallocation=off and preallocation=metadata
both allocate luks header only, and preallocation=falloc/full
is passed to underlying file.
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1534951
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Message-id: 20190716161901.1430-1-mlevitsk@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
qapi/block-core.json | 6 +++++-
block/crypto.c | 30 +++++++++++++++++++++++++++---
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index e9364a4a29..a5ab38db99 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -4212,13 +4212,17 @@
#
# @file Node to create the image format on
# @size Size of the virtual disk in bytes
+# @preallocation Preallocation mode for the new image
+# (since: 4.2)
+# (default: off; allowed values: off, metadata, falloc, full)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsLUKS',
'base': 'QCryptoBlockCreateOptionsLUKS',
'data': { 'file': 'BlockdevRef',
- 'size': 'size' } }
+ 'size': 'size',
+ '*preallocation': 'PreallocMode' } }
##
# @BlockdevCreateOptionsNfs:
diff --git a/block/crypto.c b/block/crypto.c
index 8237424ae6..7eb698774e 100644
--- a/block/crypto.c
+++ b/block/crypto.c
@@ -74,6 +74,7 @@ static ssize_t block_crypto_read_func(QCryptoBlock *block,
struct BlockCryptoCreateData {
BlockBackend *blk;
uint64_t size;
+ PreallocMode prealloc;
};
@@ -112,7 +113,7 @@ static ssize_t block_crypto_init_func(QCryptoBlock *block,
* available to the guest, so we must take account of that
* which will be used by the crypto header
*/
- return blk_truncate(data->blk, data->size + headerlen, PREALLOC_MODE_OFF,
+ return blk_truncate(data->blk, data->size + headerlen, data->prealloc,
errp);
}
@@ -251,6 +252,7 @@ static int block_crypto_open_generic(QCryptoBlockFormat format,
static int block_crypto_co_create_generic(BlockDriverState *bs,
int64_t size,
QCryptoBlockCreateOptions *opts,
+ PreallocMode prealloc,
Error **errp)
{
int ret;
@@ -266,9 +268,14 @@ static int block_crypto_co_create_generic(BlockDriverState *bs,
goto cleanup;
}
+ if (prealloc == PREALLOC_MODE_METADATA) {
+ prealloc = PREALLOC_MODE_OFF;
+ }
+
data = (struct BlockCryptoCreateData) {
.blk = blk,
.size = size,
+ .prealloc = prealloc,
};
crypto = qcrypto_block_create(opts, NULL,
@@ -500,6 +507,7 @@ block_crypto_co_create_luks(BlockdevCreateOptions *create_options, Error **errp)
BlockdevCreateOptionsLUKS *luks_opts;
BlockDriverState *bs = NULL;
QCryptoBlockCreateOptions create_opts;
+ PreallocMode preallocation = PREALLOC_MODE_OFF;
int ret;
assert(create_options->driver == BLOCKDEV_DRIVER_LUKS);
@@ -515,8 +523,12 @@ block_crypto_co_create_luks(BlockdevCreateOptions *create_options, Error **errp)
.u.luks = *qapi_BlockdevCreateOptionsLUKS_base(luks_opts),
};
+ if (luks_opts->has_preallocation) {
+ preallocation = luks_opts->preallocation;
+ }
+
ret = block_crypto_co_create_generic(bs, luks_opts->size, &create_opts,
- errp);
+ preallocation, errp);
if (ret < 0) {
goto fail;
}
@@ -534,12 +546,24 @@ static int coroutine_fn block_crypto_co_create_opts_luks(const char *filename,
QCryptoBlockCreateOptions *create_opts = NULL;
BlockDriverState *bs = NULL;
QDict *cryptoopts;
+ PreallocMode prealloc;
+ char *buf = NULL;
int64_t size;
int ret;
+ Error *local_err = NULL;
/* Parse options */
size = qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0);
+ buf = qemu_opt_get_del(opts, BLOCK_OPT_PREALLOC);
+ prealloc = qapi_enum_parse(&PreallocMode_lookup, buf,
+ PREALLOC_MODE_OFF, &local_err);
+ g_free(buf);
+ if (local_err) {
+ error_propagate(errp, local_err);
+ return -EINVAL;
+ }
+
cryptoopts = qemu_opts_to_qdict_filtered(opts, NULL,
&block_crypto_create_opts_luks,
true);
@@ -565,7 +589,7 @@ static int coroutine_fn block_crypto_co_create_opts_luks(const char *filename,
}
/* Create format layer */
- ret = block_crypto_co_create_generic(bs, size, create_opts, errp);
+ ret = block_crypto_co_create_generic(bs, size, create_opts, prealloc, errp);
if (ret < 0) {
goto fail;
}
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 02/17] qemu-img: Fix bdrv_has_zero_init() use in convert
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 01/17] LUKS: support preallocation Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 03/17] mirror: Fix bdrv_has_zero_init() use Max Reitz
` (15 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
bdrv_has_zero_init() only has meaning for newly created images or image
areas. If qemu-img convert did not create the image itself, it cannot
rely on bdrv_has_zero_init()'s result to carry any meaning.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-2-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
qemu-img.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/qemu-img.c b/qemu-img.c
index c920e3564c..7daa05e51a 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -1578,6 +1578,7 @@ typedef struct ImgConvertState {
bool has_zero_init;
bool compressed;
bool unallocated_blocks_are_zero;
+ bool target_is_new;
bool target_has_backing;
int64_t target_backing_sectors; /* negative if unknown */
bool wr_in_order;
@@ -1975,9 +1976,11 @@ static int convert_do_copy(ImgConvertState *s)
int64_t sector_num = 0;
/* Check whether we have zero initialisation or can get it efficiently */
- s->has_zero_init = s->min_sparse && !s->target_has_backing
- ? bdrv_has_zero_init(blk_bs(s->target))
- : false;
+ if (s->target_is_new && s->min_sparse && !s->target_has_backing) {
+ s->has_zero_init = bdrv_has_zero_init(blk_bs(s->target));
+ } else {
+ s->has_zero_init = false;
+ }
if (!s->has_zero_init && !s->target_has_backing &&
bdrv_can_write_zeroes_with_unmap(blk_bs(s->target)))
@@ -2428,6 +2431,8 @@ static int img_convert(int argc, char **argv)
}
}
+ s.target_is_new = !skip_create;
+
flags = s.min_sparse ? (BDRV_O_RDWR | BDRV_O_UNMAP) : BDRV_O_RDWR;
ret = bdrv_parse_cache_mode(cache, &flags, &writethrough);
if (ret < 0) {
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 03/17] mirror: Fix bdrv_has_zero_init() use
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 01/17] LUKS: support preallocation Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 02/17] qemu-img: Fix bdrv_has_zero_init() use in convert Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 04/17] block: Add bdrv_has_zero_init_truncate() Max Reitz
` (14 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
bdrv_has_zero_init() only has meaning for newly created images or image
areas. If the mirror job itself did not create the image, it cannot
rely on bdrv_has_zero_init()'s result to carry any meaning.
This is the case for drive-mirror with mode=existing and always for
blockdev-mirror.
Note that we only have to zero-initialize the target with sync=full,
because other modes actually do not promise that the target will contain
the same data as the source after the job -- sync=top only promises to
copy anything allocated in the top layer, and sync=none will only copy
new I/O. (Which is how mirror has always handled it.)
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-3-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
include/block/block_int.h | 2 ++
block/mirror.c | 11 ++++++++---
blockdev.c | 16 +++++++++++++---
tests/test-block-iothread.c | 2 +-
4 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/include/block/block_int.h b/include/block/block_int.h
index aa697f1f69..8fa011654a 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -1115,6 +1115,7 @@ BlockJob *commit_active_start(const char *job_id, BlockDriverState *bs,
* @buf_size: The amount of data that can be in flight at one time.
* @mode: Whether to collapse all images in the chain to the target.
* @backing_mode: How to establish the target's backing chain after completion.
+ * @zero_target: Whether the target should be explicitly zero-initialized
* @on_source_error: The action to take upon error reading from the source.
* @on_target_error: The action to take upon error writing to the target.
* @unmap: Whether to unmap target where source sectors only contain zeroes.
@@ -1134,6 +1135,7 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
int creation_flags, int64_t speed,
uint32_t granularity, int64_t buf_size,
MirrorSyncMode mode, BlockMirrorBackingMode backing_mode,
+ bool zero_target,
BlockdevOnError on_source_error,
BlockdevOnError on_target_error,
bool unmap, const char *filter_node_name,
diff --git a/block/mirror.c b/block/mirror.c
index 2b870683f1..853e2c7510 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -51,6 +51,8 @@ typedef struct MirrorBlockJob {
Error *replace_blocker;
bool is_none_mode;
BlockMirrorBackingMode backing_mode;
+ /* Whether the target image requires explicit zero-initialization */
+ bool zero_target;
MirrorCopyMode copy_mode;
BlockdevOnError on_source_error, on_target_error;
bool synced;
@@ -767,7 +769,7 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
int ret;
int64_t count;
- if (base == NULL && !bdrv_has_zero_init(target_bs)) {
+ if (s->zero_target) {
if (!bdrv_can_write_zeroes_with_unmap(target_bs)) {
bdrv_set_dirty_bitmap(s->dirty_bitmap, 0, s->bdev_length);
return 0;
@@ -1515,6 +1517,7 @@ static BlockJob *mirror_start_job(
const char *replaces, int64_t speed,
uint32_t granularity, int64_t buf_size,
BlockMirrorBackingMode backing_mode,
+ bool zero_target,
BlockdevOnError on_source_error,
BlockdevOnError on_target_error,
bool unmap,
@@ -1643,6 +1646,7 @@ static BlockJob *mirror_start_job(
s->on_target_error = on_target_error;
s->is_none_mode = is_none_mode;
s->backing_mode = backing_mode;
+ s->zero_target = zero_target;
s->copy_mode = copy_mode;
s->base = base;
s->granularity = granularity;
@@ -1747,6 +1751,7 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
int creation_flags, int64_t speed,
uint32_t granularity, int64_t buf_size,
MirrorSyncMode mode, BlockMirrorBackingMode backing_mode,
+ bool zero_target,
BlockdevOnError on_source_error,
BlockdevOnError on_target_error,
bool unmap, const char *filter_node_name,
@@ -1764,7 +1769,7 @@ void mirror_start(const char *job_id, BlockDriverState *bs,
is_none_mode = mode == MIRROR_SYNC_MODE_NONE;
base = mode == MIRROR_SYNC_MODE_TOP ? backing_bs(bs) : NULL;
mirror_start_job(job_id, bs, creation_flags, target, replaces,
- speed, granularity, buf_size, backing_mode,
+ speed, granularity, buf_size, backing_mode, zero_target,
on_source_error, on_target_error, unmap, NULL, NULL,
&mirror_job_driver, is_none_mode, base, false,
filter_node_name, true, copy_mode, errp);
@@ -1791,7 +1796,7 @@ BlockJob *commit_active_start(const char *job_id, BlockDriverState *bs,
ret = mirror_start_job(
job_id, bs, creation_flags, base, NULL, speed, 0, 0,
- MIRROR_LEAVE_BACKING_CHAIN,
+ MIRROR_LEAVE_BACKING_CHAIN, false,
on_error, on_error, true, cb, opaque,
&commit_active_job_driver, false, base, auto_complete,
filter_node_name, false, MIRROR_COPY_MODE_BACKGROUND,
diff --git a/blockdev.c b/blockdev.c
index 2e536dde3e..fbef6845c8 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -3782,6 +3782,7 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
bool has_replaces, const char *replaces,
enum MirrorSyncMode sync,
BlockMirrorBackingMode backing_mode,
+ bool zero_target,
bool has_speed, int64_t speed,
bool has_granularity, uint32_t granularity,
bool has_buf_size, int64_t buf_size,
@@ -3890,7 +3891,7 @@ static void blockdev_mirror_common(const char *job_id, BlockDriverState *bs,
*/
mirror_start(job_id, bs, target,
has_replaces ? replaces : NULL, job_flags,
- speed, granularity, buf_size, sync, backing_mode,
+ speed, granularity, buf_size, sync, backing_mode, zero_target,
on_source_error, on_target_error, unmap, filter_node_name,
copy_mode, errp);
}
@@ -3906,6 +3907,7 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
int flags;
int64_t size;
const char *format = arg->format;
+ bool zero_target;
int ret;
bs = qmp_get_root_bs(arg->device, errp);
@@ -4007,6 +4009,10 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
goto out;
}
+ zero_target = (arg->sync == MIRROR_SYNC_MODE_FULL &&
+ (arg->mode == NEW_IMAGE_MODE_EXISTING ||
+ !bdrv_has_zero_init(target_bs)));
+
ret = bdrv_try_set_aio_context(target_bs, aio_context, errp);
if (ret < 0) {
bdrv_unref(target_bs);
@@ -4015,7 +4021,8 @@ void qmp_drive_mirror(DriveMirror *arg, Error **errp)
blockdev_mirror_common(arg->has_job_id ? arg->job_id : NULL, bs, target_bs,
arg->has_replaces, arg->replaces, arg->sync,
- backing_mode, arg->has_speed, arg->speed,
+ backing_mode, zero_target,
+ arg->has_speed, arg->speed,
arg->has_granularity, arg->granularity,
arg->has_buf_size, arg->buf_size,
arg->has_on_source_error, arg->on_source_error,
@@ -4055,6 +4062,7 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
AioContext *aio_context;
BlockMirrorBackingMode backing_mode = MIRROR_LEAVE_BACKING_CHAIN;
Error *local_err = NULL;
+ bool zero_target;
int ret;
bs = qmp_get_root_bs(device, errp);
@@ -4067,6 +4075,8 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
return;
}
+ zero_target = (sync == MIRROR_SYNC_MODE_FULL);
+
aio_context = bdrv_get_aio_context(bs);
aio_context_acquire(aio_context);
@@ -4077,7 +4087,7 @@ void qmp_blockdev_mirror(bool has_job_id, const char *job_id,
blockdev_mirror_common(has_job_id ? job_id : NULL, bs, target_bs,
has_replaces, replaces, sync, backing_mode,
- has_speed, speed,
+ zero_target, has_speed, speed,
has_granularity, granularity,
has_buf_size, buf_size,
has_on_source_error, on_source_error,
diff --git a/tests/test-block-iothread.c b/tests/test-block-iothread.c
index e81b5b8dc4..926577b1f9 100644
--- a/tests/test-block-iothread.c
+++ b/tests/test-block-iothread.c
@@ -612,7 +612,7 @@ static void test_propagate_mirror(void)
/* Start a mirror job */
mirror_start("job0", src, target, NULL, JOB_DEFAULT, 0, 0, 0,
- MIRROR_SYNC_MODE_NONE, MIRROR_OPEN_BACKING_CHAIN,
+ MIRROR_SYNC_MODE_NONE, MIRROR_OPEN_BACKING_CHAIN, false,
BLOCKDEV_ON_ERROR_REPORT, BLOCKDEV_ON_ERROR_REPORT,
false, "filter_node", MIRROR_COPY_MODE_BACKGROUND,
&error_abort);
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 04/17] block: Add bdrv_has_zero_init_truncate()
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (2 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 03/17] mirror: Fix bdrv_has_zero_init() use Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 05/17] block: Implement .bdrv_has_zero_init_truncate() Max Reitz
` (13 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
No .bdrv_has_zero_init() implementation returns 1 if growing the file
would add non-zero areas (at least with PREALLOC_MODE_OFF), so using it
in lieu of this new function was always safe.
But on the other hand, it is possible that growing an image that is not
zero-initialized would still add a zero-initialized area, like when
using nonpreallocating truncation on a preallocated image. For callers
that care only about truncation, not about creation with potential
preallocation, this new function is useful.
Alternatively, we could have added a PreallocMode parameter to
bdrv_has_zero_init(). But the only user would have been qemu-img
convert, which does not have a plain PreallocMode value right now -- it
would have to parse the creation option to obtain it. Therefore, the
simpler solution is to let bdrv_has_zero_init() inquire the
preallocation status and add the new bdrv_has_zero_init_truncate() that
presupposes PREALLOC_MODE_OFF.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-4-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
include/block/block.h | 1 +
include/block/block_int.h | 7 +++++++
block.c | 21 +++++++++++++++++++++
3 files changed, 29 insertions(+)
diff --git a/include/block/block.h b/include/block/block.h
index 89e40318cf..124ad40809 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -443,6 +443,7 @@ int bdrv_pdiscard(BdrvChild *child, int64_t offset, int64_t bytes);
int bdrv_co_pdiscard(BdrvChild *child, int64_t offset, int64_t bytes);
int bdrv_has_zero_init_1(BlockDriverState *bs);
int bdrv_has_zero_init(BlockDriverState *bs);
+int bdrv_has_zero_init_truncate(BlockDriverState *bs);
bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs);
bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs);
int bdrv_block_status(BlockDriverState *bs, int64_t offset,
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 8fa011654a..ceec8c2f56 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -419,9 +419,16 @@ struct BlockDriver {
/*
* Returns 1 if newly created images are guaranteed to contain only
* zeros, 0 otherwise.
+ * Must return 0 if .bdrv_has_zero_init_truncate() returns 0.
*/
int (*bdrv_has_zero_init)(BlockDriverState *bs);
+ /*
+ * Returns 1 if new areas added by growing the image with
+ * PREALLOC_MODE_OFF contain only zeros, 0 otherwise.
+ */
+ int (*bdrv_has_zero_init_truncate)(BlockDriverState *bs);
+
/* Remove fd handlers, timers, and other event loop callbacks so the event
* loop is no longer in use. Called with no in-flight requests and in
* depth-first traversal order with parents before child nodes.
diff --git a/block.c b/block.c
index 3e698e9cab..874a29a983 100644
--- a/block.c
+++ b/block.c
@@ -5078,6 +5078,27 @@ int bdrv_has_zero_init(BlockDriverState *bs)
return 0;
}
+int bdrv_has_zero_init_truncate(BlockDriverState *bs)
+{
+ if (!bs->drv) {
+ return 0;
+ }
+
+ if (bs->backing) {
+ /* Depends on the backing image length, but better safe than sorry */
+ return 0;
+ }
+ if (bs->drv->bdrv_has_zero_init_truncate) {
+ return bs->drv->bdrv_has_zero_init_truncate(bs);
+ }
+ if (bs->file && bs->drv->is_filter) {
+ return bdrv_has_zero_init_truncate(bs->file->bs);
+ }
+
+ /* safe default */
+ return 0;
+}
+
bool bdrv_unallocated_blocks_are_zero(BlockDriverState *bs)
{
BlockDriverInfo bdi;
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 05/17] block: Implement .bdrv_has_zero_init_truncate()
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (3 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 04/17] block: Add bdrv_has_zero_init_truncate() Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 06/17] block: Use bdrv_has_zero_init_truncate() Max Reitz
` (12 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
We need to implement .bdrv_has_zero_init_truncate() for every block
driver that supports truncation and has a .bdrv_has_zero_init()
implementation.
Implement it the same way each driver implements .bdrv_has_zero_init().
This is at least not any more unsafe than what we had before.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-5-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/file-posix.c | 1 +
block/file-win32.c | 1 +
block/gluster.c | 4 ++++
block/nfs.c | 1 +
block/qcow2.c | 1 +
block/qed.c | 1 +
block/raw-format.c | 6 ++++++
block/rbd.c | 1 +
block/sheepdog.c | 1 +
block/ssh.c | 1 +
10 files changed, 18 insertions(+)
diff --git a/block/file-posix.c b/block/file-posix.c
index e41e91e075..fbeb0068db 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -2938,6 +2938,7 @@ BlockDriver bdrv_file = {
.bdrv_co_create = raw_co_create,
.bdrv_co_create_opts = raw_co_create_opts,
.bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init_truncate = bdrv_has_zero_init_1,
.bdrv_co_block_status = raw_co_block_status,
.bdrv_co_invalidate_cache = raw_co_invalidate_cache,
.bdrv_co_pwrite_zeroes = raw_co_pwrite_zeroes,
diff --git a/block/file-win32.c b/block/file-win32.c
index 6b2d67b239..41f55dfece 100644
--- a/block/file-win32.c
+++ b/block/file-win32.c
@@ -635,6 +635,7 @@ BlockDriver bdrv_file = {
.bdrv_close = raw_close,
.bdrv_co_create_opts = raw_co_create_opts,
.bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init_truncate = bdrv_has_zero_init_1,
.bdrv_aio_preadv = raw_aio_preadv,
.bdrv_aio_pwritev = raw_aio_pwritev,
diff --git a/block/gluster.c b/block/gluster.c
index f64dc5b01e..64028b2cba 100644
--- a/block/gluster.c
+++ b/block/gluster.c
@@ -1567,6 +1567,7 @@ static BlockDriver bdrv_gluster = {
.bdrv_co_writev = qemu_gluster_co_writev,
.bdrv_co_flush_to_disk = qemu_gluster_co_flush_to_disk,
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
+ .bdrv_has_zero_init_truncate = qemu_gluster_has_zero_init,
#ifdef CONFIG_GLUSTERFS_DISCARD
.bdrv_co_pdiscard = qemu_gluster_co_pdiscard,
#endif
@@ -1598,6 +1599,7 @@ static BlockDriver bdrv_gluster_tcp = {
.bdrv_co_writev = qemu_gluster_co_writev,
.bdrv_co_flush_to_disk = qemu_gluster_co_flush_to_disk,
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
+ .bdrv_has_zero_init_truncate = qemu_gluster_has_zero_init,
#ifdef CONFIG_GLUSTERFS_DISCARD
.bdrv_co_pdiscard = qemu_gluster_co_pdiscard,
#endif
@@ -1629,6 +1631,7 @@ static BlockDriver bdrv_gluster_unix = {
.bdrv_co_writev = qemu_gluster_co_writev,
.bdrv_co_flush_to_disk = qemu_gluster_co_flush_to_disk,
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
+ .bdrv_has_zero_init_truncate = qemu_gluster_has_zero_init,
#ifdef CONFIG_GLUSTERFS_DISCARD
.bdrv_co_pdiscard = qemu_gluster_co_pdiscard,
#endif
@@ -1666,6 +1669,7 @@ static BlockDriver bdrv_gluster_rdma = {
.bdrv_co_writev = qemu_gluster_co_writev,
.bdrv_co_flush_to_disk = qemu_gluster_co_flush_to_disk,
.bdrv_has_zero_init = qemu_gluster_has_zero_init,
+ .bdrv_has_zero_init_truncate = qemu_gluster_has_zero_init,
#ifdef CONFIG_GLUSTERFS_DISCARD
.bdrv_co_pdiscard = qemu_gluster_co_pdiscard,
#endif
diff --git a/block/nfs.c b/block/nfs.c
index ed0cce63bb..0ec50953e4 100644
--- a/block/nfs.c
+++ b/block/nfs.c
@@ -863,6 +863,7 @@ static BlockDriver bdrv_nfs = {
.create_opts = &nfs_create_opts,
.bdrv_has_zero_init = nfs_has_zero_init,
+ .bdrv_has_zero_init_truncate = nfs_has_zero_init,
.bdrv_get_allocated_file_size = nfs_get_allocated_file_size,
.bdrv_co_truncate = nfs_file_co_truncate,
diff --git a/block/qcow2.c b/block/qcow2.c
index 59cff1d4cb..ea3b42fdac 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -5188,6 +5188,7 @@ BlockDriver bdrv_qcow2 = {
.bdrv_co_create_opts = qcow2_co_create_opts,
.bdrv_co_create = qcow2_co_create,
.bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init_truncate = bdrv_has_zero_init_1,
.bdrv_co_block_status = qcow2_co_block_status,
.bdrv_co_preadv = qcow2_co_preadv,
diff --git a/block/qed.c b/block/qed.c
index d0dcc5f14d..0d8fd507aa 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -1669,6 +1669,7 @@ static BlockDriver bdrv_qed = {
.bdrv_co_create = bdrv_qed_co_create,
.bdrv_co_create_opts = bdrv_qed_co_create_opts,
.bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init_truncate = bdrv_has_zero_init_1,
.bdrv_co_block_status = bdrv_qed_co_block_status,
.bdrv_co_readv = bdrv_qed_co_readv,
.bdrv_co_writev = bdrv_qed_co_writev,
diff --git a/block/raw-format.c b/block/raw-format.c
index bffd424dd0..42c28cc29a 100644
--- a/block/raw-format.c
+++ b/block/raw-format.c
@@ -413,6 +413,11 @@ static int raw_has_zero_init(BlockDriverState *bs)
return bdrv_has_zero_init(bs->file->bs);
}
+static int raw_has_zero_init_truncate(BlockDriverState *bs)
+{
+ return bdrv_has_zero_init_truncate(bs->file->bs);
+}
+
static int coroutine_fn raw_co_create_opts(const char *filename, QemuOpts *opts,
Error **errp)
{
@@ -572,6 +577,7 @@ BlockDriver bdrv_raw = {
.bdrv_co_ioctl = &raw_co_ioctl,
.create_opts = &raw_create_opts,
.bdrv_has_zero_init = &raw_has_zero_init,
+ .bdrv_has_zero_init_truncate = &raw_has_zero_init_truncate,
.strong_runtime_opts = raw_strong_runtime_opts,
.mutable_opts = mutable_opts,
};
diff --git a/block/rbd.c b/block/rbd.c
index 59757b3120..057af43d48 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -1288,6 +1288,7 @@ static BlockDriver bdrv_rbd = {
.bdrv_co_create = qemu_rbd_co_create,
.bdrv_co_create_opts = qemu_rbd_co_create_opts,
.bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init_truncate = bdrv_has_zero_init_1,
.bdrv_get_info = qemu_rbd_getinfo,
.create_opts = &qemu_rbd_create_opts,
.bdrv_getlength = qemu_rbd_getlength,
diff --git a/block/sheepdog.c b/block/sheepdog.c
index 31b0a820c2..773dfc6ab1 100644
--- a/block/sheepdog.c
+++ b/block/sheepdog.c
@@ -3229,6 +3229,7 @@ static BlockDriver bdrv_sheepdog = {
.bdrv_co_create = sd_co_create,
.bdrv_co_create_opts = sd_co_create_opts,
.bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init_truncate = bdrv_has_zero_init_1,
.bdrv_getlength = sd_getlength,
.bdrv_get_allocated_file_size = sd_get_allocated_file_size,
.bdrv_co_truncate = sd_co_truncate,
diff --git a/block/ssh.c b/block/ssh.c
index 501933b855..84d01e892b 100644
--- a/block/ssh.c
+++ b/block/ssh.c
@@ -1390,6 +1390,7 @@ static BlockDriver bdrv_ssh = {
.bdrv_co_create_opts = ssh_co_create_opts,
.bdrv_close = ssh_close,
.bdrv_has_zero_init = ssh_has_zero_init,
+ .bdrv_has_zero_init_truncate = ssh_has_zero_init,
.bdrv_co_readv = ssh_co_readv,
.bdrv_co_writev = ssh_co_writev,
.bdrv_getlength = ssh_getlength,
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 06/17] block: Use bdrv_has_zero_init_truncate()
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (4 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 05/17] block: Implement .bdrv_has_zero_init_truncate() Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 07/17] qcow2: Fix .bdrv_has_zero_init() Max Reitz
` (11 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
vhdx and parallels call bdrv_has_zero_init() when they do not really
care about an image's post-create state but only about what happens when
you grow an image. That is a bit ugly, and also overly safe when
growing preallocated images without preallocating the new areas.
Let them use bdrv_has_zero_init_truncate() instead.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-6-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
[mreitz: Added commit message]
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/parallels.c | 2 +-
block/vhdx.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/block/parallels.c b/block/parallels.c
index 00fae125d1..7cd2714b69 100644
--- a/block/parallels.c
+++ b/block/parallels.c
@@ -835,7 +835,7 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
goto fail_options;
}
- if (!bdrv_has_zero_init(bs->file->bs)) {
+ if (!bdrv_has_zero_init_truncate(bs->file->bs)) {
s->prealloc_mode = PRL_PREALLOC_MODE_FALLOCATE;
}
diff --git a/block/vhdx.c b/block/vhdx.c
index d6070b6fa8..a02d1c99a7 100644
--- a/block/vhdx.c
+++ b/block/vhdx.c
@@ -1282,7 +1282,7 @@ static coroutine_fn int vhdx_co_writev(BlockDriverState *bs, int64_t sector_num,
/* Queue another write of zero buffers if the underlying file
* does not zero-fill on file extension */
- if (bdrv_has_zero_init(bs->file->bs) == 0) {
+ if (bdrv_has_zero_init_truncate(bs->file->bs) == 0) {
use_zero_buffers = true;
/* zero fill the front, if any */
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 07/17] qcow2: Fix .bdrv_has_zero_init()
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (5 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 06/17] block: Use bdrv_has_zero_init_truncate() Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 08/17] vdi: " Max Reitz
` (10 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
If a qcow2 file is preallocated, it can no longer guarantee that it
initially appears as filled with zeroes.
So implement .bdrv_has_zero_init() by checking whether the file is
preallocated; if so, forward the call to the underlying storage node,
except for when it is encrypted: Encrypted preallocated images always
return effectively random data, so .bdrv_has_zero_init() must always
return 0 for them.
.bdrv_has_zero_init_truncate() can remain bdrv_has_zero_init_1(),
because it presupposes PREALLOC_MODE_OFF.
Reported-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-7-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/qcow2.c | 29 ++++++++++++++++++++++++++++-
1 file changed, 28 insertions(+), 1 deletion(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index ea3b42fdac..7c5a4859f7 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -4632,6 +4632,33 @@ static ImageInfoSpecific *qcow2_get_specific_info(BlockDriverState *bs,
return spec_info;
}
+static int qcow2_has_zero_init(BlockDriverState *bs)
+{
+ BDRVQcow2State *s = bs->opaque;
+ bool preallocated;
+
+ if (qemu_in_coroutine()) {
+ qemu_co_mutex_lock(&s->lock);
+ }
+ /*
+ * Check preallocation status: Preallocated images have all L2
+ * tables allocated, nonpreallocated images have none. It is
+ * therefore enough to check the first one.
+ */
+ preallocated = s->l1_size > 0 && s->l1_table[0] != 0;
+ if (qemu_in_coroutine()) {
+ qemu_co_mutex_unlock(&s->lock);
+ }
+
+ if (!preallocated) {
+ return 1;
+ } else if (bs->encrypted) {
+ return 0;
+ } else {
+ return bdrv_has_zero_init(s->data_file->bs);
+ }
+}
+
static int qcow2_save_vmstate(BlockDriverState *bs, QEMUIOVector *qiov,
int64_t pos)
{
@@ -5187,7 +5214,7 @@ BlockDriver bdrv_qcow2 = {
.bdrv_child_perm = bdrv_format_default_perms,
.bdrv_co_create_opts = qcow2_co_create_opts,
.bdrv_co_create = qcow2_co_create,
- .bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init = qcow2_has_zero_init,
.bdrv_has_zero_init_truncate = bdrv_has_zero_init_1,
.bdrv_co_block_status = qcow2_co_block_status,
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 08/17] vdi: Fix .bdrv_has_zero_init()
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (6 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 07/17] qcow2: Fix .bdrv_has_zero_init() Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 09/17] vhdx: " Max Reitz
` (9 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
Static VDI images cannot guarantee to be zero-initialized. If the image
has been statically allocated, forward the call to the underlying
storage node.
Reported-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Acked-by: Stefano Garzarella <sgarzare@redhat.com>
Tested-by: Stefano Garzarella <sgarzare@redhat.com>
Message-id: 20190724171239.8764-8-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/vdi.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/block/vdi.c b/block/vdi.c
index b9845a4cbd..0caa3f281d 100644
--- a/block/vdi.c
+++ b/block/vdi.c
@@ -988,6 +988,17 @@ static void vdi_close(BlockDriverState *bs)
error_free(s->migration_blocker);
}
+static int vdi_has_zero_init(BlockDriverState *bs)
+{
+ BDRVVdiState *s = bs->opaque;
+
+ if (s->header.image_type == VDI_TYPE_STATIC) {
+ return bdrv_has_zero_init(bs->file->bs);
+ } else {
+ return 1;
+ }
+}
+
static QemuOptsList vdi_create_opts = {
.name = "vdi-create-opts",
.head = QTAILQ_HEAD_INITIALIZER(vdi_create_opts.head),
@@ -1028,7 +1039,7 @@ static BlockDriver bdrv_vdi = {
.bdrv_child_perm = bdrv_format_default_perms,
.bdrv_co_create = vdi_co_create,
.bdrv_co_create_opts = vdi_co_create_opts,
- .bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init = vdi_has_zero_init,
.bdrv_co_block_status = vdi_co_block_status,
.bdrv_make_empty = vdi_make_empty,
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 09/17] vhdx: Fix .bdrv_has_zero_init()
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (7 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 08/17] vdi: " Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 10/17] iotests: Convert to preallocated encrypted qcow2 Max Reitz
` (8 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
Fixed VHDX images cannot guarantee to be zero-initialized. If the image
has the "fixed" subformat, forward the call to the underlying storage
node.
Reported-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-9-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/vhdx.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/block/vhdx.c b/block/vhdx.c
index a02d1c99a7..6a09d0a55c 100644
--- a/block/vhdx.c
+++ b/block/vhdx.c
@@ -2075,6 +2075,30 @@ static int coroutine_fn vhdx_co_check(BlockDriverState *bs,
return 0;
}
+static int vhdx_has_zero_init(BlockDriverState *bs)
+{
+ BDRVVHDXState *s = bs->opaque;
+ int state;
+
+ /*
+ * Check the subformat: Fixed images have all BAT entries present,
+ * dynamic images have none (right after creation). It is
+ * therefore enough to check the first BAT entry.
+ */
+ if (!s->bat_entries) {
+ return 1;
+ }
+
+ state = s->bat[0] & VHDX_BAT_STATE_BIT_MASK;
+ if (state == PAYLOAD_BLOCK_FULLY_PRESENT) {
+ /* Fixed subformat */
+ return bdrv_has_zero_init(bs->file->bs);
+ }
+
+ /* Dynamic subformat */
+ return 1;
+}
+
static QemuOptsList vhdx_create_opts = {
.name = "vhdx-create-opts",
.head = QTAILQ_HEAD_INITIALIZER(vhdx_create_opts.head),
@@ -2128,7 +2152,7 @@ static BlockDriver bdrv_vhdx = {
.bdrv_co_create_opts = vhdx_co_create_opts,
.bdrv_get_info = vhdx_get_info,
.bdrv_co_check = vhdx_co_check,
- .bdrv_has_zero_init = bdrv_has_zero_init_1,
+ .bdrv_has_zero_init = vhdx_has_zero_init,
.create_opts = &vhdx_create_opts,
};
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 10/17] iotests: Convert to preallocated encrypted qcow2
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (8 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 09/17] vhdx: " Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 11/17] iotests: Test convert -n to pre-filled image Max Reitz
` (7 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
Add a test case for converting an empty image (which only returns zeroes
when read) to a preallocated encrypted qcow2 image.
qcow2_has_zero_init() should return 0 then, thus forcing qemu-img
convert to create zero clusters.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Acked-by: Stefano Garzarella <sgarzare@redhat.com>
Tested-by: Stefano Garzarella <sgarzare@redhat.com>
Message-id: 20190724171239.8764-10-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/188 | 20 +++++++++++++++++++-
tests/qemu-iotests/188.out | 4 ++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/tests/qemu-iotests/188 b/tests/qemu-iotests/188
index be7278aa65..afca44df54 100755
--- a/tests/qemu-iotests/188
+++ b/tests/qemu-iotests/188
@@ -48,7 +48,7 @@ SECRETALT="secret,id=sec0,data=platypus"
_make_test_img --object $SECRET -o "encrypt.format=luks,encrypt.key-secret=sec0,encrypt.iter-time=10" $size
-IMGSPEC="driver=$IMGFMT,file.filename=$TEST_IMG,encrypt.key-secret=sec0"
+IMGSPEC="driver=$IMGFMT,encrypt.key-secret=sec0,file.filename=$TEST_IMG"
QEMU_IO_OPTIONS=$QEMU_IO_OPTIONS_NO_FMT
@@ -68,6 +68,24 @@ echo
echo "== verify open failure with wrong password =="
$QEMU_IO --object $SECRETALT -c "read -P 0xa 0 $size" --image-opts $IMGSPEC | _filter_qemu_io | _filter_testdir
+_cleanup_test_img
+
+echo
+echo "== verify that has_zero_init returns false when preallocating =="
+
+# Empty source file
+if [ -n "$TEST_IMG_FILE" ]; then
+ TEST_IMG_FILE="${TEST_IMG_FILE}.orig" _make_test_img $size
+else
+ TEST_IMG="${TEST_IMG}.orig" _make_test_img $size
+fi
+
+$QEMU_IMG convert -O "$IMGFMT" --object $SECRET \
+ -o "encrypt.format=luks,encrypt.key-secret=sec0,encrypt.iter-time=10,preallocation=metadata" \
+ "${TEST_IMG}.orig" "$TEST_IMG"
+
+$QEMU_IMG compare --object $SECRET --image-opts "${IMGSPEC}.orig" "$IMGSPEC"
+
# success, all done
echo "*** done"
diff --git a/tests/qemu-iotests/188.out b/tests/qemu-iotests/188.out
index 97b1402671..c568ef3701 100644
--- a/tests/qemu-iotests/188.out
+++ b/tests/qemu-iotests/188.out
@@ -15,4 +15,8 @@ read 16777216/16777216 bytes at offset 0
== verify open failure with wrong password ==
qemu-io: can't open: Invalid password, cannot unlock any keyslot
+
+== verify that has_zero_init returns false when preallocating ==
+Formatting 'TEST_DIR/t.IMGFMT.orig', fmt=IMGFMT size=16777216
+Images are identical.
*** done
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 11/17] iotests: Test convert -n to pre-filled image
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (9 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 10/17] iotests: Convert to preallocated encrypted qcow2 Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 12/17] iotests: Full mirror to existing non-zero image Max Reitz
` (6 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-11-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/122 | 17 +++++++++++++++++
tests/qemu-iotests/122.out | 8 ++++++++
2 files changed, 25 insertions(+)
diff --git a/tests/qemu-iotests/122 b/tests/qemu-iotests/122
index 85c3a8d047..059011ebb1 100755
--- a/tests/qemu-iotests/122
+++ b/tests/qemu-iotests/122
@@ -257,6 +257,23 @@ for min_sparse in 4k 8k; do
$QEMU_IMG map --output=json "$TEST_IMG".orig | _filter_qemu_img_map
done
+
+echo
+echo '=== -n to a non-zero image ==='
+echo
+
+# Keep source zero
+_make_test_img 64M
+
+# Output is not zero, but has bdrv_has_zero_init() == 1
+TEST_IMG="$TEST_IMG".orig _make_test_img 64M
+$QEMU_IO -c "write -P 42 0 64k" "$TEST_IMG".orig | _filter_qemu_io
+
+# Convert with -n, which should not assume that the target is zeroed
+$QEMU_IMG convert -O $IMGFMT -n "$TEST_IMG" "$TEST_IMG".orig
+
+$QEMU_IMG compare "$TEST_IMG" "$TEST_IMG".orig
+
# success, all done
echo '*** done'
rm -f $seq.full
diff --git a/tests/qemu-iotests/122.out b/tests/qemu-iotests/122.out
index c576705284..849b6cc2ef 100644
--- a/tests/qemu-iotests/122.out
+++ b/tests/qemu-iotests/122.out
@@ -220,4 +220,12 @@ convert -c -S 8k
{ "start": 9216, "length": 8192, "depth": 0, "zero": true, "data": false},
{ "start": 17408, "length": 1024, "depth": 0, "zero": false, "data": true},
{ "start": 18432, "length": 67090432, "depth": 0, "zero": true, "data": false}]
+
+=== -n to a non-zero image ===
+
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
+Formatting 'TEST_DIR/t.IMGFMT.orig', fmt=IMGFMT size=67108864
+wrote 65536/65536 bytes at offset 0
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
+Images are identical.
*** done
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 12/17] iotests: Full mirror to existing non-zero image
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (10 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 11/17] iotests: Test convert -n to pre-filled image Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 13/17] vdi: Make block_status recurse for fixed images Max Reitz
` (5 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
The result of a sync=full mirror should always be the equal to the
input. Therefore, existing images should be treated as potentially
non-zero and thus should be explicitly initialized to be zero
beforehand.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-12-mreitz@redhat.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/041 | 62 +++++++++++++++++++++++++++++++++++---
tests/qemu-iotests/041.out | 4 +--
2 files changed, 60 insertions(+), 6 deletions(-)
diff --git a/tests/qemu-iotests/041 b/tests/qemu-iotests/041
index 26bf1701eb..8bc8f81db7 100755
--- a/tests/qemu-iotests/041
+++ b/tests/qemu-iotests/041
@@ -741,8 +741,15 @@ class TestUnbackedSource(iotests.QMPTestCase):
def setUp(self):
qemu_img('create', '-f', iotests.imgfmt, test_img,
str(TestUnbackedSource.image_len))
- self.vm = iotests.VM().add_drive(test_img)
+ self.vm = iotests.VM()
self.vm.launch()
+ result = self.vm.qmp('blockdev-add', node_name='drive0',
+ driver=iotests.imgfmt,
+ file={
+ 'driver': 'file',
+ 'filename': test_img,
+ })
+ self.assert_qmp(result, 'return', {})
def tearDown(self):
self.vm.shutdown()
@@ -751,7 +758,7 @@ class TestUnbackedSource(iotests.QMPTestCase):
def test_absolute_paths_full(self):
self.assert_no_active_block_jobs()
- result = self.vm.qmp('drive-mirror', device='drive0',
+ result = self.vm.qmp('drive-mirror', job_id='drive0', device='drive0',
sync='full', target=target_img,
mode='absolute-paths')
self.assert_qmp(result, 'return', {})
@@ -760,7 +767,7 @@ class TestUnbackedSource(iotests.QMPTestCase):
def test_absolute_paths_top(self):
self.assert_no_active_block_jobs()
- result = self.vm.qmp('drive-mirror', device='drive0',
+ result = self.vm.qmp('drive-mirror', job_id='drive0', device='drive0',
sync='top', target=target_img,
mode='absolute-paths')
self.assert_qmp(result, 'return', {})
@@ -769,13 +776,60 @@ class TestUnbackedSource(iotests.QMPTestCase):
def test_absolute_paths_none(self):
self.assert_no_active_block_jobs()
- result = self.vm.qmp('drive-mirror', device='drive0',
+ result = self.vm.qmp('drive-mirror', job_id='drive0', device='drive0',
sync='none', target=target_img,
mode='absolute-paths')
self.assert_qmp(result, 'return', {})
self.complete_and_wait()
self.assert_no_active_block_jobs()
+ def test_existing_full(self):
+ qemu_img('create', '-f', iotests.imgfmt, target_img,
+ str(self.image_len))
+ qemu_io('-c', 'write -P 42 0 64k', target_img)
+
+ self.assert_no_active_block_jobs()
+ result = self.vm.qmp('drive-mirror', job_id='drive0', device='drive0',
+ sync='full', target=target_img, mode='existing')
+ self.assert_qmp(result, 'return', {})
+ self.complete_and_wait()
+ self.assert_no_active_block_jobs()
+
+ result = self.vm.qmp('blockdev-del', node_name='drive0')
+ self.assert_qmp(result, 'return', {})
+
+ self.assertTrue(iotests.compare_images(test_img, target_img),
+ 'target image does not match source after mirroring')
+
+ def test_blockdev_full(self):
+ qemu_img('create', '-f', iotests.imgfmt, target_img,
+ str(self.image_len))
+ qemu_io('-c', 'write -P 42 0 64k', target_img)
+
+ result = self.vm.qmp('blockdev-add', node_name='target',
+ driver=iotests.imgfmt,
+ file={
+ 'driver': 'file',
+ 'filename': target_img,
+ })
+ self.assert_qmp(result, 'return', {})
+
+ self.assert_no_active_block_jobs()
+ result = self.vm.qmp('blockdev-mirror', job_id='drive0', device='drive0',
+ sync='full', target='target')
+ self.assert_qmp(result, 'return', {})
+ self.complete_and_wait()
+ self.assert_no_active_block_jobs()
+
+ result = self.vm.qmp('blockdev-del', node_name='drive0')
+ self.assert_qmp(result, 'return', {})
+
+ result = self.vm.qmp('blockdev-del', node_name='target')
+ self.assert_qmp(result, 'return', {})
+
+ self.assertTrue(iotests.compare_images(test_img, target_img),
+ 'target image does not match source after mirroring')
+
class TestGranularity(iotests.QMPTestCase):
image_len = 10 * 1024 * 1024 # MB
diff --git a/tests/qemu-iotests/041.out b/tests/qemu-iotests/041.out
index e071d0b261..2c448b4239 100644
--- a/tests/qemu-iotests/041.out
+++ b/tests/qemu-iotests/041.out
@@ -1,5 +1,5 @@
-........................................................................................
+..........................................................................................
----------------------------------------------------------------------
-Ran 88 tests
+Ran 90 tests
OK
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 13/17] vdi: Make block_status recurse for fixed images
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (11 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 12/17] iotests: Full mirror to existing non-zero image Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 14/17] vmdk: Make block_status recurse for flat extents Max Reitz
` (4 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
Suggested-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Fixes: 69f47505ee66afaa513305de0c1895a224e52c45
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190725155512.9827-2-mreitz@redhat.com
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/vdi.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/block/vdi.c b/block/vdi.c
index 0caa3f281d..806ba7f53c 100644
--- a/block/vdi.c
+++ b/block/vdi.c
@@ -542,7 +542,8 @@ static int coroutine_fn vdi_co_block_status(BlockDriverState *bs,
*map = s->header.offset_data + (uint64_t)bmap_entry * s->block_size +
index_in_block;
*file = bs->file->bs;
- return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID;
+ return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID |
+ (s->header.image_type == VDI_TYPE_STATIC ? BDRV_BLOCK_RECURSE : 0);
}
static int coroutine_fn
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 14/17] vmdk: Make block_status recurse for flat extents
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (12 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 13/17] vdi: Make block_status recurse for fixed images Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 15/17] vpc: Do not return RAW from block_status Max Reitz
` (3 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
Fixes: 69f47505ee66afaa513305de0c1895a224e52c45
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190725155512.9827-3-mreitz@redhat.com
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/vmdk.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/block/vmdk.c b/block/vmdk.c
index bd36ece125..fd78fd0ccf 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -1692,6 +1692,9 @@ static int coroutine_fn vmdk_co_block_status(BlockDriverState *bs,
if (!extent->compressed) {
ret |= BDRV_BLOCK_OFFSET_VALID;
*map = cluster_offset + index_in_cluster;
+ if (extent->flat) {
+ ret |= BDRV_BLOCK_RECURSE;
+ }
}
*file = extent->file->bs;
break;
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 15/17] vpc: Do not return RAW from block_status
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (13 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 14/17] vmdk: Make block_status recurse for flat extents Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 16/17] iotests: Fix 141 when run with qed Max Reitz
` (2 subsequent siblings)
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
vpc is not really a passthrough driver, even when using the fixed
subformat (where host and guest offsets are equal). It should handle
preallocation like all other drivers do, namely by returning
DATA | RECURSE instead of RAW.
There is no tangible difference but the fact that bdrv_is_allocated() no
longer falls through to the protocol layer.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190725155512.9827-4-mreitz@redhat.com
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
block/vpc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/block/vpc.c b/block/vpc.c
index d4776ee8a5..b25aab0425 100644
--- a/block/vpc.c
+++ b/block/vpc.c
@@ -737,7 +737,7 @@ static int coroutine_fn vpc_co_block_status(BlockDriverState *bs,
*pnum = bytes;
*map = offset;
*file = bs->file->bs;
- return BDRV_BLOCK_RAW | BDRV_BLOCK_OFFSET_VALID;
+ return BDRV_BLOCK_DATA | BDRV_BLOCK_OFFSET_VALID | BDRV_BLOCK_RECURSE;
}
qemu_co_mutex_lock(&s->lock);
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 16/17] iotests: Fix 141 when run with qed
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (14 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 15/17] vpc: Do not return RAW from block_status Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 17/17] doc: Preallocation does not require writing zeroes Max Reitz
2019-08-20 12:40 ` [Qemu-devel] [PULL 00/17] Block patches Peter Maydell
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
69f47505ee has changed qcow2 in such a way that the commit job run in
test 141 (and 144[1]) returns before it emits the READY event. However,
141 also runs with qed, where the order is still the other way around.
Just filter out the {"return": {}} so the test passes for qed again.
[1] 144 only runs with qcow2, so it is fine as it is.
Suggested-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Fixes: 69f47505ee66afaa513305de0c1895a224e52c45
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190809185253.17535-1-mreitz@redhat.com
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
tests/qemu-iotests/141 | 9 +++++++--
tests/qemu-iotests/141.out | 5 -----
tests/qemu-iotests/common.filter | 5 +++++
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/tests/qemu-iotests/141 b/tests/qemu-iotests/141
index 2197a82d45..8c2ae79f2b 100755
--- a/tests/qemu-iotests/141
+++ b/tests/qemu-iotests/141
@@ -58,16 +58,21 @@ test_blockjob()
}}}" \
'return'
+ # If "$2" is an event, we may or may not see it before the
+ # {"return": {}}. Therefore, filter the {"return": {}} out both
+ # here and in the next command. (Naturally, if we do not see it
+ # here, we will see it before the next command can be executed,
+ # so it will appear in the next _send_qemu_cmd's output.)
_send_qemu_cmd $QEMU_HANDLE \
"$1" \
"$2" \
- | _filter_img_create
+ | _filter_img_create | _filter_qmp_empty_return
# We want this to return an error because the block job is still running
_send_qemu_cmd $QEMU_HANDLE \
"{'execute': 'blockdev-del',
'arguments': {'node-name': 'drv0'}}" \
- 'error' | _filter_generated_node_ids
+ 'error' | _filter_generated_node_ids | _filter_qmp_empty_return
_send_qemu_cmd $QEMU_HANDLE \
"{'execute': 'block-job-cancel',
diff --git a/tests/qemu-iotests/141.out b/tests/qemu-iotests/141.out
index 4d71d9dcae..dbd3bdef6c 100644
--- a/tests/qemu-iotests/141.out
+++ b/tests/qemu-iotests/141.out
@@ -10,7 +10,6 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576 backing_file=TEST_DIR/m.
Formatting 'TEST_DIR/o.IMGFMT', fmt=IMGFMT size=1048576 backing_file=TEST_DIR/t.IMGFMT backing_fmt=IMGFMT
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "job0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "job0"}}
-{"return": {}}
{"error": {"class": "GenericError", "desc": "Node drv0 is in use"}}
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "aborting", "id": "job0"}}
@@ -27,7 +26,6 @@ Formatting 'TEST_DIR/o.IMGFMT', fmt=IMGFMT size=1048576 backing_file=TEST_DIR/t.
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "job0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "ready", "id": "job0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "job0", "len": 0, "offset": 0, "speed": 0, "type": "mirror"}}
-{"return": {}}
{"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is in use by block job: mirror"}}
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "waiting", "id": "job0"}}
@@ -42,7 +40,6 @@ Formatting 'TEST_DIR/o.IMGFMT', fmt=IMGFMT size=1048576 backing_file=TEST_DIR/t.
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "job0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "job0"}}
-{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "ready", "id": "job0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_JOB_READY", "data": {"device": "job0", "len": 0, "offset": 0, "speed": 0, "type": "commit"}}
{"error": {"class": "GenericError", "desc": "Node 'drv0' is busy: block device is in use by block job: commit"}}
@@ -61,7 +58,6 @@ wrote 1048576/1048576 bytes at offset 0
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "job0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "job0"}}
-{"return": {}}
{"error": {"class": "GenericError", "desc": "Node drv0 is in use"}}
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "aborting", "id": "job0"}}
@@ -77,7 +73,6 @@ wrote 1048576/1048576 bytes at offset 0
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "created", "id": "job0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "running", "id": "job0"}}
-{"return": {}}
{"error": {"class": "GenericError", "desc": "Node drv0 is in use"}}
{"return": {}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data": {"status": "aborting", "id": "job0"}}
diff --git a/tests/qemu-iotests/common.filter b/tests/qemu-iotests/common.filter
index 35fddc746f..8e9235d6fe 100644
--- a/tests/qemu-iotests/common.filter
+++ b/tests/qemu-iotests/common.filter
@@ -219,5 +219,10 @@ _filter_nbd()
-e 's#\(foo\|PORT/\?\|.sock\): Failed to .*$#\1#'
}
+_filter_qmp_empty_return()
+{
+ grep -v '{"return": {}}'
+}
+
# make sure this script returns success
true
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 17/17] doc: Preallocation does not require writing zeroes
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (15 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 16/17] iotests: Fix 141 when run with qed Max Reitz
@ 2019-08-19 16:17 ` Max Reitz
2019-08-20 12:40 ` [Qemu-devel] [PULL 00/17] Block patches Peter Maydell
17 siblings, 0 replies; 40+ messages in thread
From: Max Reitz @ 2019-08-19 16:17 UTC (permalink / raw)
To: qemu-block; +Cc: Kevin Wolf, Peter Maydell, qemu-devel, Max Reitz
When preallocating an encrypted qcow2 image, it just lets the protocol
driver write data and then does not mark the clusters as zero.
Therefore, reading this image will yield effectively random data.
As such, we have not fulfilled the promise of always writing zeroes when
preallocating an image in a while. It seems that nobody has really
cared, so change the documentation to conform to qemu's actual behavior.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190711132935.13070-1-mreitz@redhat.com
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
qapi/block-core.json | 9 +++++----
docs/qemu-block-drivers.texi | 4 ++--
qemu-img.texi | 4 ++--
3 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index a5ab38db99..e6edd641f1 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -5178,10 +5178,11 @@
# @off: no preallocation
# @metadata: preallocate only for metadata
# @falloc: like @full preallocation but allocate disk space by
-# posix_fallocate() rather than writing zeros.
-# @full: preallocate all data by writing zeros to device to ensure disk
-# space is really available. @full preallocation also sets up
-# metadata correctly.
+# posix_fallocate() rather than writing data.
+# @full: preallocate all data by writing it to the device to ensure
+# disk space is really available. This data may or may not be
+# zero, depending on the image format and storage.
+# @full preallocation also sets up metadata correctly.
#
# Since: 2.2
##
diff --git a/docs/qemu-block-drivers.texi b/docs/qemu-block-drivers.texi
index 91ab0eceae..c02547e28c 100644
--- a/docs/qemu-block-drivers.texi
+++ b/docs/qemu-block-drivers.texi
@@ -31,8 +31,8 @@ Supported options:
@item preallocation
Preallocation mode (allowed values: @code{off}, @code{falloc}, @code{full}).
@code{falloc} mode preallocates space for image by calling posix_fallocate().
-@code{full} mode preallocates space for image by writing zeros to underlying
-storage.
+@code{full} mode preallocates space for image by writing data to underlying
+storage. This data may or may not be zero, depending on the storage location.
@end table
@item qcow2
diff --git a/qemu-img.texi b/qemu-img.texi
index c8e9bba515..b5156d6316 100644
--- a/qemu-img.texi
+++ b/qemu-img.texi
@@ -666,8 +666,8 @@ Supported options:
@item preallocation
Preallocation mode (allowed values: @code{off}, @code{falloc}, @code{full}).
@code{falloc} mode preallocates space for image by calling posix_fallocate().
-@code{full} mode preallocates space for image by writing zeros to underlying
-storage.
+@code{full} mode preallocates space for image by writing data to underlying
+storage. This data may or may not be zero, depending on the storage location.
@end table
@item qcow2
--
2.21.0
^ permalink raw reply related [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
` (16 preceding siblings ...)
2019-08-19 16:17 ` [Qemu-devel] [PULL 17/17] doc: Preallocation does not require writing zeroes Max Reitz
@ 2019-08-20 12:40 ` Peter Maydell
17 siblings, 0 replies; 40+ messages in thread
From: Peter Maydell @ 2019-08-20 12:40 UTC (permalink / raw)
To: Max Reitz; +Cc: Kevin Wolf, QEMU Developers, Qemu-block
On Mon, 19 Aug 2019 at 17:17, Max Reitz <mreitz@redhat.com> wrote:
>
> The following changes since commit 3fbd3405d2b0604ea530fc7a1828f19da1e95ff9:
>
> Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2019-08-17' into staging (2019-08-19 14:14:09 +0100)
>
> are available in the Git repository at:
>
> https://github.com/XanClic/qemu.git tags/pull-block-2019-08-19
>
> for you to fetch changes up to fa27c478102a6b5d1c6b02c005607ad9404b915f:
>
> doc: Preallocation does not require writing zeroes (2019-08-19 17:13:26 +0200)
>
> ----------------------------------------------------------------
> Block patches:
> - preallocation=falloc/full support for LUKS
> - Various minor fixes
>
> ----------------------------------------------------------------
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/4.2
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2016-09-12 15:56 ` Peter Maydell
2016-09-13 1:11 ` Fam Zheng
@ 2016-09-13 8:53 ` Stefan Hajnoczi
1 sibling, 0 replies; 40+ messages in thread
From: Stefan Hajnoczi @ 2016-09-13 8:53 UTC (permalink / raw)
To: Peter Maydell; +Cc: Stefan Hajnoczi, QEMU Developers
On Mon, Sep 12, 2016 at 4:56 PM, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 12 September 2016 at 16:12, Peter Maydell <peter.maydell@linaro.org> wrote:
>> On 12 September 2016 at 15:08, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>>> The following changes since commit c2a57aae9a1c3dd7de77daf5478df10379aeeebf:
>>>
>>> Merge remote-tracking branch 'remotes/famz/tags/docker-pull-request' into staging (2016-09-09 12:49:41 +0100)
>>>
>>> are available in the git repository at:
>>>
>>> git://github.com/stefanha/qemu.git tags/block-pull-request
>>>
>>> for you to fetch changes up to 8f1096787517c66b67cc29bab65edc0188a86326:
>>>
>>> tests: fix qvirtqueue_kick (2016-09-12 15:06:29 +0100)
>>
>>
>> /replication/primary/get_error: OK
>> /replication/secondary/get_error: OK
>>
>> Please can you rename these tests? They create false positives in
>> scripts that look in the build logs for errors by grepping for
>> "error:" or "warning:".
>
> Also, two new sanitizer errors:
>
> /home/petmay01/linaro/qemu-for-merges/block/qcow2.c:1807:41: runtime
> error: null pointer passed as argument 2, which is declared to never
> be null
> /home/petmay01/linaro/qemu-for-merges/block/qcow2-cluster.c:86:26:
> runtime error: null pointer passed as argument 2, which is declared to
> never be null
>
> both attempts to memcpy() from a NULL source pointer while running
> the tests/test-replication test.
These sanitizer errors cannot be introduced by this pull request
because no patches touched block/qcow2.c or block/qcow2-cluster.c.
Strange.
I will add a patch to fix them anyway.
Stefan
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2016-09-13 1:11 ` Fam Zheng
@ 2016-09-13 8:34 ` Stefan Hajnoczi
0 siblings, 0 replies; 40+ messages in thread
From: Stefan Hajnoczi @ 2016-09-13 8:34 UTC (permalink / raw)
To: Fam Zheng; +Cc: Stefan Hajnoczi, QEMU Developers
On Tue, Sep 13, 2016 at 2:11 AM, Fam Zheng <famz@redhat.com> wrote:
> On Mon, 09/12 16:56, Peter Maydell wrote:
>> On 12 September 2016 at 16:12, Peter Maydell <peter.maydell@linaro.org> wrote:
>> > On 12 September 2016 at 15:08, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>> >> The following changes since commit c2a57aae9a1c3dd7de77daf5478df10379aeeebf:
>> >>
>> >> Merge remote-tracking branch 'remotes/famz/tags/docker-pull-request' into staging (2016-09-09 12:49:41 +0100)
>> >>
>> >> are available in the git repository at:
>> >>
>> >> git://github.com/stefanha/qemu.git tags/block-pull-request
>> >>
>> >> for you to fetch changes up to 8f1096787517c66b67cc29bab65edc0188a86326:
>> >>
>> >> tests: fix qvirtqueue_kick (2016-09-12 15:06:29 +0100)
>> >
>> >
>> > /replication/primary/get_error: OK
>> > /replication/secondary/get_error: OK
>> >
>> > Please can you rename these tests? They create false positives in
>> > scripts that look in the build logs for errors by grepping for
>> > "error:" or "warning:".
>>
>> Also, two new sanitizer errors:
>>
>> /home/petmay01/linaro/qemu-for-merges/block/qcow2.c:1807:41: runtime
>> error: null pointer passed as argument 2, which is declared to never
>> be null
>> /home/petmay01/linaro/qemu-for-merges/block/qcow2-cluster.c:86:26:
>> runtime error: null pointer passed as argument 2, which is declared to
>> never be null
>>
>> both attempts to memcpy() from a NULL source pointer while running
>> the tests/test-replication test.
>>
>
> Stefan, if you are going to do another PULL, do you mind including
>
> https://lists.gnu.org/archive/html/qemu-devel/2016-09/msg01717.html
>
> as well? :)
Sure, I'll resend today.
Stefan
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2016-09-12 15:56 ` Peter Maydell
@ 2016-09-13 1:11 ` Fam Zheng
2016-09-13 8:34 ` Stefan Hajnoczi
2016-09-13 8:53 ` Stefan Hajnoczi
1 sibling, 1 reply; 40+ messages in thread
From: Fam Zheng @ 2016-09-13 1:11 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers
On Mon, 09/12 16:56, Peter Maydell wrote:
> On 12 September 2016 at 16:12, Peter Maydell <peter.maydell@linaro.org> wrote:
> > On 12 September 2016 at 15:08, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> >> The following changes since commit c2a57aae9a1c3dd7de77daf5478df10379aeeebf:
> >>
> >> Merge remote-tracking branch 'remotes/famz/tags/docker-pull-request' into staging (2016-09-09 12:49:41 +0100)
> >>
> >> are available in the git repository at:
> >>
> >> git://github.com/stefanha/qemu.git tags/block-pull-request
> >>
> >> for you to fetch changes up to 8f1096787517c66b67cc29bab65edc0188a86326:
> >>
> >> tests: fix qvirtqueue_kick (2016-09-12 15:06:29 +0100)
> >
> >
> > /replication/primary/get_error: OK
> > /replication/secondary/get_error: OK
> >
> > Please can you rename these tests? They create false positives in
> > scripts that look in the build logs for errors by grepping for
> > "error:" or "warning:".
>
> Also, two new sanitizer errors:
>
> /home/petmay01/linaro/qemu-for-merges/block/qcow2.c:1807:41: runtime
> error: null pointer passed as argument 2, which is declared to never
> be null
> /home/petmay01/linaro/qemu-for-merges/block/qcow2-cluster.c:86:26:
> runtime error: null pointer passed as argument 2, which is declared to
> never be null
>
> both attempts to memcpy() from a NULL source pointer while running
> the tests/test-replication test.
>
Stefan, if you are going to do another PULL, do you mind including
https://lists.gnu.org/archive/html/qemu-devel/2016-09/msg01717.html
as well? :)
Fam
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2016-09-12 15:12 ` Peter Maydell
@ 2016-09-12 15:56 ` Peter Maydell
2016-09-13 1:11 ` Fam Zheng
2016-09-13 8:53 ` Stefan Hajnoczi
0 siblings, 2 replies; 40+ messages in thread
From: Peter Maydell @ 2016-09-12 15:56 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers
On 12 September 2016 at 16:12, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 12 September 2016 at 15:08, Stefan Hajnoczi <stefanha@redhat.com> wrote:
>> The following changes since commit c2a57aae9a1c3dd7de77daf5478df10379aeeebf:
>>
>> Merge remote-tracking branch 'remotes/famz/tags/docker-pull-request' into staging (2016-09-09 12:49:41 +0100)
>>
>> are available in the git repository at:
>>
>> git://github.com/stefanha/qemu.git tags/block-pull-request
>>
>> for you to fetch changes up to 8f1096787517c66b67cc29bab65edc0188a86326:
>>
>> tests: fix qvirtqueue_kick (2016-09-12 15:06:29 +0100)
>
>
> /replication/primary/get_error: OK
> /replication/secondary/get_error: OK
>
> Please can you rename these tests? They create false positives in
> scripts that look in the build logs for errors by grepping for
> "error:" or "warning:".
Also, two new sanitizer errors:
/home/petmay01/linaro/qemu-for-merges/block/qcow2.c:1807:41: runtime
error: null pointer passed as argument 2, which is declared to never
be null
/home/petmay01/linaro/qemu-for-merges/block/qcow2-cluster.c:86:26:
runtime error: null pointer passed as argument 2, which is declared to
never be null
both attempts to memcpy() from a NULL source pointer while running
the tests/test-replication test.
thanks
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2016-09-12 14:08 Stefan Hajnoczi
@ 2016-09-12 15:12 ` Peter Maydell
2016-09-12 15:56 ` Peter Maydell
0 siblings, 1 reply; 40+ messages in thread
From: Peter Maydell @ 2016-09-12 15:12 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers
On 12 September 2016 at 15:08, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit c2a57aae9a1c3dd7de77daf5478df10379aeeebf:
>
> Merge remote-tracking branch 'remotes/famz/tags/docker-pull-request' into staging (2016-09-09 12:49:41 +0100)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 8f1096787517c66b67cc29bab65edc0188a86326:
>
> tests: fix qvirtqueue_kick (2016-09-12 15:06:29 +0100)
/replication/primary/get_error: OK
/replication/secondary/get_error: OK
Please can you rename these tests? They create false positives in
scripts that look in the build logs for errors by grepping for
"error:" or "warning:".
thanks
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 00/17] Block patches
@ 2016-09-12 14:08 Stefan Hajnoczi
2016-09-12 15:12 ` Peter Maydell
0 siblings, 1 reply; 40+ messages in thread
From: Stefan Hajnoczi @ 2016-09-12 14:08 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi
The following changes since commit c2a57aae9a1c3dd7de77daf5478df10379aeeebf:
Merge remote-tracking branch 'remotes/famz/tags/docker-pull-request' into staging (2016-09-09 12:49:41 +0100)
are available in the git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 8f1096787517c66b67cc29bab65edc0188a86326:
tests: fix qvirtqueue_kick (2016-09-12 15:06:29 +0100)
----------------------------------------------------------------
----------------------------------------------------------------
Changlong Xie (6):
virtio-blk: rename virtio_device_info to virtio_blk_info
Backup: export interfaces for extra serialization
configure: support replication
replication: Introduce new APIs to do replication operation
tests: add unit test case for replication
MAINTAINERS: add maintainer for replication
Laurent Vivier (1):
tests: fix qvirtqueue_kick
Roman Pen (3):
linux-aio: consume events in userspace instead of calling io_getevents
linux-aio: split processing events function
linux-aio: process completions from ioq_submit()
Wen Congyang (7):
block: unblock backup operations in backing file
Backup: clear all bitmap when doing block checkpoint
block: Link backup into block core
docs: block replication's description
mirror: auto complete active commit
replication: Implement new driver for block replication
support replication driver in blockdev-add
MAINTAINERS | 9 +
Makefile.objs | 1 +
block.c | 17 ++
block/Makefile.objs | 3 +-
block/backup.c | 59 +++-
block/linux-aio.c | 184 +++++++++---
block/mirror.c | 13 +-
block/replication.c | 659 +++++++++++++++++++++++++++++++++++++++++++
blockdev.c | 2 +-
configure | 11 +
docs/block-replication.txt | 239 ++++++++++++++++
hw/block/virtio-blk.c | 4 +-
include/block/block_backup.h | 39 +++
include/block/block_int.h | 3 +-
qapi/block-core.json | 36 ++-
qemu-img.c | 2 +-
replication.c | 107 +++++++
replication.h | 174 ++++++++++++
tests/.gitignore | 1 +
tests/Makefile.include | 4 +
tests/libqos/virtio.c | 6 +-
tests/test-replication.c | 575 +++++++++++++++++++++++++++++++++++++
22 files changed, 2086 insertions(+), 62 deletions(-)
create mode 100644 block/replication.c
create mode 100644 docs/block-replication.txt
create mode 100644 include/block/block_backup.h
create mode 100644 replication.c
create mode 100644 replication.h
create mode 100644 tests/test-replication.c
--
2.7.4
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2016-01-20 16:24 Kevin Wolf
@ 2016-01-21 13:42 ` Peter Maydell
0 siblings, 0 replies; 40+ messages in thread
From: Peter Maydell @ 2016-01-21 13:42 UTC (permalink / raw)
To: Kevin Wolf; +Cc: QEMU Developers, Qemu-block
On 20 January 2016 at 16:24, Kevin Wolf <kwolf@redhat.com> wrote:
> The following changes since commit 3db34bf64ab4f8797565dd8750003156c32b301d:
>
> Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-peter' into staging (2016-01-18 17:40:50 +0000)
>
> are available in the git repository at:
>
>
> git://repo.or.cz/qemu/kevin.git tags/for-upstream
>
> for you to fetch changes up to e9b155501da2638e4e319af9960d35da1bc8662b:
>
> iotests: Test that throttle values ranges (2016-01-20 13:37:57 +0100)
>
> ----------------------------------------------------------------
> Block layer patches
>
> ----------------------------------------------------------------
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 00/17] Block patches
@ 2016-01-20 16:24 Kevin Wolf
2016-01-21 13:42 ` Peter Maydell
0 siblings, 1 reply; 40+ messages in thread
From: Kevin Wolf @ 2016-01-20 16:24 UTC (permalink / raw)
To: qemu-block; +Cc: kwolf, qemu-devel
The following changes since commit 3db34bf64ab4f8797565dd8750003156c32b301d:
Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-peter' into staging (2016-01-18 17:40:50 +0000)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git tags/for-upstream
for you to fetch changes up to e9b155501da2638e4e319af9960d35da1bc8662b:
iotests: Test that throttle values ranges (2016-01-20 13:37:57 +0100)
----------------------------------------------------------------
Block layer patches
----------------------------------------------------------------
Christian Borntraeger (1):
block/raw-posix: avoid bogus fixup for cylinders on DASD disks
Eric Blake (1):
qemu-iotests: Reduce racy output in 028
Fam Zheng (4):
qemu-img: Speed up comparing empty/zero images
vmdk: Create streamOptimized as version 3
blockdev: Error out on negative throttling option values
iotests: Test that throttle values ranges
Kevin Wolf (10):
block: Fix .bdrv_open flags
qcow2: Write feature table only for v3 images
qcow2: Write full header on image creation
block: Assert no write requests under BDRV_O_INCOMING
block: Fix error path in bdrv_invalidate_cache()
block: Rename BDRV_O_INCOMING to BDRV_O_INACTIVE
block: Inactivate BDS when migration completes
qcow2: Implement .bdrv_inactivate
qcow2: Fix BDRV_O_INACTIVE handling in qcow2_invalidate_cache()
qcow2: Make image inaccessible after failed qcow2_invalidate_cache()
Peter Maydell (1):
block: Clean up includes
block.c | 55 ++++++++++++++++----
block/accounting.c | 1 +
block/archipelago.c | 2 +-
block/backup.c | 4 +-
block/blkdebug.c | 1 +
block/blkverify.c | 2 +-
block/block-backend.c | 1 +
block/bochs.c | 1 +
block/cloop.c | 1 +
block/commit.c | 1 +
block/curl.c | 1 +
block/dmg.c | 1 +
block/gluster.c | 1 +
block/io.c | 3 ++
block/iscsi.c | 2 +-
block/linux-aio.c | 1 +
block/mirror.c | 1 +
block/nbd-client.c | 1 +
block/nbd.c | 3 +-
block/nfs.c | 2 +-
block/null.c | 1 +
block/parallels.c | 1 +
block/qapi.c | 1 +
block/qcow.c | 1 +
block/qcow2-cache.c | 3 +-
block/qcow2-cluster.c | 1 +
block/qcow2-refcount.c | 1 +
block/qcow2-snapshot.c | 1 +
block/qcow2.c | 111 ++++++++++++++++++++++++----------------
block/qed-check.c | 1 +
block/qed-cluster.c | 1 +
block/qed-gencb.c | 1 +
block/qed-l2-cache.c | 1 +
block/qed-table.c | 1 +
block/qed.c | 5 +-
block/quorum.c | 1 +
block/raw-posix.c | 10 +---
block/raw-win32.c | 1 +
block/raw_bsd.c | 1 +
block/rbd.c | 2 +-
block/sheepdog.c | 1 +
block/snapshot.c | 1 +
block/ssh.c | 4 +-
block/stream.c | 1 +
block/throttle-groups.c | 1 +
block/vdi.c | 1 +
block/vhdx-endian.c | 1 +
block/vhdx-log.c | 1 +
block/vhdx.c | 1 +
block/vmdk.c | 9 +++-
block/vpc.c | 1 +
block/vvfat.c | 2 +-
block/win32-aio.c | 1 +
block/write-threshold.c | 1 +
blockdev.c | 3 +-
hw/block/block.c | 1 +
hw/block/cdrom.c | 1 +
hw/block/dataplane/virtio-blk.c | 1 +
hw/block/ecc.c | 1 +
hw/block/fdc.c | 1 +
hw/block/hd-geometry.c | 1 +
hw/block/m25p80.c | 1 +
hw/block/nvme.c | 1 +
hw/block/onenand.c | 1 +
hw/block/pflash_cfi01.c | 1 +
hw/block/pflash_cfi02.c | 1 +
hw/block/tc58128.c | 1 +
hw/block/virtio-blk.c | 1 +
hw/block/xen_disk.c | 12 +----
include/block/block.h | 3 +-
include/block/block_int.h | 1 +
include/qemu/throttle.h | 2 +
migration/migration.c | 7 +++
nbd/server.c | 2 +-
qemu-img.c | 47 +++++++++++------
qemu-io-cmds.c | 1 +
qemu-io.c | 5 +-
qmp.c | 12 +++++
tests/qemu-iotests/028 | 6 ++-
tests/qemu-iotests/028.out | 3 --
tests/qemu-iotests/031.out | 17 +++---
tests/qemu-iotests/036 | 2 +
tests/qemu-iotests/036.out | 5 ++
tests/qemu-iotests/051 | 18 +++++++
tests/qemu-iotests/051.out | 39 ++++++++++++++
tests/qemu-iotests/051.pc.out | 39 ++++++++++++++
tests/qemu-iotests/061.out | 35 +++++++------
util/throttle.c | 16 +++---
88 files changed, 390 insertions(+), 155 deletions(-)
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2015-07-07 13:47 ` Peter Maydell
@ 2015-07-08 13:52 ` Stefan Hajnoczi
0 siblings, 0 replies; 40+ messages in thread
From: Stefan Hajnoczi @ 2015-07-08 13:52 UTC (permalink / raw)
To: Peter Maydell; +Cc: Kevin Wolf, QEMU Developers, Stefan Hajnoczi
[-- Attachment #1: Type: text/plain, Size: 1558 bytes --]
On Tue, Jul 07, 2015 at 02:47:50PM +0100, Peter Maydell wrote:
> On 2 July 2015 at 10:19, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> > The following changes since commit d2966f804d70a244f5dde395fc5d22a50ed3e74e:
> >
> > Merge remote-tracking branch 'remotes/vivier/tags/pull-m68k-20150629' into staging (2015-06-29 17:03:20 +0100)
> >
> > are available in the git repository at:
> >
> > git://github.com/stefanha/qemu.git tags/block-pull-request
> >
> > for you to fetch changes up to 764ba3ae511adddfa750db290ac8375d660ca5b9:
> >
> > block: remove redundant check before g_slist_find() (2015-07-02 10:06:23 +0100)
> >
> > ----------------------------------------------------------------
> >
> > ----------------------------------------------------------------
> >
> > Alberto Garcia (3):
> > timer: Move NANOSECONDS_PER_SECONDS to timer.h
> > timer: Use a single definition of NSEC_PER_SEC for the whole codebase
>
> I've just noticed that this clashes with the OSX standard
> headers:
>
> In file included from /Users/pm215/src/qemu/ui/cocoa.m:31:
> In file included from /Users/pm215/src/qemu/include/sysemu/sysemu.h:8:
> /Users/pm215/src/qemu/include/qemu/timer.h:8:9: warning:
> 'NSEC_PER_SEC' macro redefined [-Wmacro-redefined]
> #define NSEC_PER_SEC 1000000000LL
> ^
> /usr/include/dispatch/time.h:48:9: note: previous definition is here
> #define NSEC_PER_SEC 1000000000ull
>
> Can we use some other constant name, please?
Alberto is on vacation so I guess I'm on the hook to fix this.
[-- Attachment #2: Type: application/pgp-signature, Size: 473 bytes --]
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2015-07-02 9:19 Stefan Hajnoczi
2015-07-02 12:46 ` Peter Maydell
@ 2015-07-07 13:47 ` Peter Maydell
2015-07-08 13:52 ` Stefan Hajnoczi
1 sibling, 1 reply; 40+ messages in thread
From: Peter Maydell @ 2015-07-07 13:47 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: Kevin Wolf, QEMU Developers
On 2 July 2015 at 10:19, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit d2966f804d70a244f5dde395fc5d22a50ed3e74e:
>
> Merge remote-tracking branch 'remotes/vivier/tags/pull-m68k-20150629' into staging (2015-06-29 17:03:20 +0100)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 764ba3ae511adddfa750db290ac8375d660ca5b9:
>
> block: remove redundant check before g_slist_find() (2015-07-02 10:06:23 +0100)
>
> ----------------------------------------------------------------
>
> ----------------------------------------------------------------
>
> Alberto Garcia (3):
> timer: Move NANOSECONDS_PER_SECONDS to timer.h
> timer: Use a single definition of NSEC_PER_SEC for the whole codebase
I've just noticed that this clashes with the OSX standard
headers:
In file included from /Users/pm215/src/qemu/ui/cocoa.m:31:
In file included from /Users/pm215/src/qemu/include/sysemu/sysemu.h:8:
/Users/pm215/src/qemu/include/qemu/timer.h:8:9: warning:
'NSEC_PER_SEC' macro redefined [-Wmacro-redefined]
#define NSEC_PER_SEC 1000000000LL
^
/usr/include/dispatch/time.h:48:9: note: previous definition is here
#define NSEC_PER_SEC 1000000000ull
Can we use some other constant name, please?
thanks
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2015-07-02 9:19 Stefan Hajnoczi
@ 2015-07-02 12:46 ` Peter Maydell
2015-07-07 13:47 ` Peter Maydell
1 sibling, 0 replies; 40+ messages in thread
From: Peter Maydell @ 2015-07-02 12:46 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: Kevin Wolf, QEMU Developers
On 2 July 2015 at 10:19, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit d2966f804d70a244f5dde395fc5d22a50ed3e74e:
>
> Merge remote-tracking branch 'remotes/vivier/tags/pull-m68k-20150629' into staging (2015-06-29 17:03:20 +0100)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 764ba3ae511adddfa750db290ac8375d660ca5b9:
>
> block: remove redundant check before g_slist_find() (2015-07-02 10:06:23 +0100)
>
> ----------------------------------------------------------------
>
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 00/17] Block patches
@ 2015-07-02 9:19 Stefan Hajnoczi
2015-07-02 12:46 ` Peter Maydell
2015-07-07 13:47 ` Peter Maydell
0 siblings, 2 replies; 40+ messages in thread
From: Stefan Hajnoczi @ 2015-07-02 9:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Kevin Wolf, Peter Maydell, Stefan Hajnoczi
The following changes since commit d2966f804d70a244f5dde395fc5d22a50ed3e74e:
Merge remote-tracking branch 'remotes/vivier/tags/pull-m68k-20150629' into staging (2015-06-29 17:03:20 +0100)
are available in the git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 764ba3ae511adddfa750db290ac8375d660ca5b9:
block: remove redundant check before g_slist_find() (2015-07-02 10:06:23 +0100)
----------------------------------------------------------------
----------------------------------------------------------------
Alberto Garcia (3):
timer: Move NANOSECONDS_PER_SECONDS to timer.h
timer: Use a single definition of NSEC_PER_SEC for the whole codebase
block: remove redundant check before g_slist_find()
Fam Zheng (8):
block: Add bdrv_get_block_status_above
qmp: Add optional bool "unmap" to drive-mirror
mirror: Do zero write on target if sectors not allocated
block: Fix dirty bitmap in bdrv_co_discard
block: Remove bdrv_reset_dirty
qemu-iotests: Make block job methods common
qemu-iotests: Add test case for mirror with unmap
iotests: Use event_wait in wait_ready
Jindřich Makovička (1):
qcow2: Handle EAGAIN returned from update_refcount
John Snow (1):
qapi: Rename 'dirty-bitmap' mode to 'incremental'
Paolo Bonzini (1):
blockdev: no need to drain+flush in hmp_drive_del
Peter Lieven (3):
block/iscsi: add support for request timeouts
block/iscsi: restore compatiblity with libiscsi 1.9.0
block/nfs: limit maximum readahead size to 1MB
block.c | 12 -----
block/backup.c | 10 ++--
block/io.c | 62 +++++++++++++++++------
block/iscsi.c | 111 +++++++++++++++++++++++++++++++++---------
block/mirror.c | 32 +++++++++---
block/nfs.c | 7 +++
block/qcow2-refcount.c | 22 +++++----
blockdev.c | 8 +--
docs/bitmaps.md | 8 +--
hmp.c | 2 +-
hw/ppc/ppc.c | 2 -
hw/ppc/spapr_rtc.c | 3 +-
hw/timer/mc146818rtc.c | 1 -
hw/usb/hcd-ehci.c | 2 +-
include/block/block.h | 4 ++
include/block/block_int.h | 6 +--
include/qemu/throttle.h | 2 -
include/qemu/timer.h | 2 +
qapi/block-core.json | 16 ++++--
qemu-options.hx | 5 ++
qmp-commands.hx | 9 ++--
tests/qemu-iotests/041 | 66 ++++++-------------------
tests/qemu-iotests/124 | 6 +--
tests/qemu-iotests/132 | 59 ++++++++++++++++++++++
tests/qemu-iotests/132.out | 5 ++
tests/qemu-iotests/group | 1 +
tests/qemu-iotests/iotests.py | 23 +++++++++
tests/rtl8139-test.c | 10 ++--
tests/test-throttle.c | 8 +--
tests/wdt_ib700-test.c | 15 +++---
util/throttle.c | 4 +-
31 files changed, 353 insertions(+), 170 deletions(-)
create mode 100644 tests/qemu-iotests/132
create mode 100644 tests/qemu-iotests/132.out
--
2.4.3
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2015-06-05 11:57 Stefan Hajnoczi
@ 2015-06-05 13:53 ` Peter Maydell
0 siblings, 0 replies; 40+ messages in thread
From: Peter Maydell @ 2015-06-05 13:53 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: Kevin Wolf, QEMU Developers
On 5 June 2015 at 12:57, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit 3b730f570c5872ceea2137848f1d4554d4847441:
>
> Merge remote-tracking branch 'remotes/agraf/tags/signed-ppc-for-upstream' into staging (2015-06-04 14:04:14 +0100)
>
> are available in the git repository at:
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 1ad69e1128519a970a9fdf0203a67ab4bc18eb68:
>
> qemu-iotests: expand test 093 to support group throttling (2015-06-05 11:03:07 +0100)
>
> ----------------------------------------------------------------
I'm afraid this doesn't pass 'make check' on my OSX box:
MALLOC_PERTURB_=${MALLOC_PERTURB_:-$((RANDOM % 255 + 1))} gtester -k
--verbose -m=quick tests/test-throttle
TEST: tests/test-throttle... (pid=56152)
/throttle/leak_bucket: OK
/throttle/compute_wait:
qemu: qemu_mutex_lock: Invalid argument
OK
/throttle/init: OK
/throttle/destroy: OK
/throttle/have_timer: OK
/throttle/detach_attach: OK
/throttle/config/enabled: OK
/throttle/config/conflicting: OK
/throttle/config/is_valid: OK
/throttle/config_functions: OK
/throttle/accounting: OK
/throttle/groups: FAIL
GTester: last random seed: R02S1a38f05a43ead1a639325fc354866dd4
(pid=56154)
FAIL: tests/test-throttle
make: *** [check-tests/test-throttle] Error 1
Backtrace:
#0 0x00007fff8d25c286 in __pthread_kill ()
#1 0x00007fff9495d42f in pthread_kill ()
#2 0x00007fff9635fb53 in abort ()
#3 0x00000001000c0890 in error_exit (err=22, msg=0x1000f0042
"qemu_mutex_lock") at
/Users/pm215/src/qemu/util/qemu-thread-posix.c:48
#4 0x00000001000c0904 in qemu_mutex_lock (mutex=0x1000fa560) at
/Users/pm215/src/qemu/util/qemu-thread-posix.c:75
#5 0x00000001000719b3 in throttle_group_incref (name=0x1000e0d20
"bar") at /Users/pm215/src/qemu/block/throttle-groups.c:86
#6 0x0000000100071829 in throttle_group_register_bs (bs=0x10100c400,
groupname=0x1000e0d20 "bar") at
/Users/pm215/src/qemu/block/throttle-groups.c:399
#7 0x0000000100002c89 in test_groups () at
/Users/pm215/src/qemu/tests/test-throttle.c:519
#8 0x00000001005d891d in g_test_run_suite_internal ()
#9 0x00000001005d8ae1 in g_test_run_suite_internal ()
#10 0x00000001005d8198 in g_test_run_suite ()
#11 0x00000001000012da in main (argc=1, argv=0x7fff5fbff8e0) at
/Users/pm215/src/qemu/tests/test-throttle.c:595
OSX errno 22 is EINVAL.
As far as I can tell nothing is calling throttle_groups_init() and
so the mutex hasn't been initialized when the test code tries to
lock it.
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 00/17] Block patches
@ 2015-06-05 11:57 Stefan Hajnoczi
2015-06-05 13:53 ` Peter Maydell
0 siblings, 1 reply; 40+ messages in thread
From: Stefan Hajnoczi @ 2015-06-05 11:57 UTC (permalink / raw)
To: qemu-devel; +Cc: Kevin Wolf, Peter Maydell, Stefan Hajnoczi
The following changes since commit 3b730f570c5872ceea2137848f1d4554d4847441:
Merge remote-tracking branch 'remotes/agraf/tags/signed-ppc-for-upstream' into staging (2015-06-04 14:04:14 +0100)
are available in the git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 1ad69e1128519a970a9fdf0203a67ab4bc18eb68:
qemu-iotests: expand test 093 to support group throttling (2015-06-05 11:03:07 +0100)
----------------------------------------------------------------
----------------------------------------------------------------
Alberto Garcia (7):
throttle: Add throttle group infrastructure
throttle: Add throttle group infrastructure tests
throttle: Add throttle group support
throttle: acquire the ThrottleGroup lock in bdrv_swap()
throttle: add the name of the ThrottleGroup to BlockDeviceInfo
throttle: Update throttle infrastructure copyright
qemu-iotests: expand test 093 to support group throttling
Benoît Canet (1):
throttle: Extract timers from ThrottleState into a separate structure
Fam Zheng (8):
block: Add bdrv_get_block_status_above
qmp: Add optional bool "unmap" to drive-mirror
mirror: Do zero write on target if sectors not allocated
block: Fix dirty bitmap in bdrv_co_discard
block: Remove bdrv_reset_dirty
qemu-iotests: Make block job methods common
qemu-iotests: Add test case for mirror with unmap
iotests: Use event_wait in wait_ready
Stefan Hajnoczi (1):
Revert "iothread: release iothread around aio_poll"
async.c | 8 +-
block.c | 50 ++--
block/Makefile.objs | 1 +
block/io.c | 131 +++++------
block/mirror.c | 27 ++-
block/qapi.c | 8 +-
block/throttle-groups.c | 496 ++++++++++++++++++++++++++++++++++++++++
blockdev.c | 43 +++-
hmp.c | 12 +-
include/block/block.h | 7 +-
include/block/block_int.h | 11 +-
include/block/throttle-groups.h | 46 ++++
include/qemu/throttle.h | 46 ++--
iothread.c | 11 +-
qapi/block-core.json | 37 ++-
qemu-options.hx | 1 +
qmp-commands.hx | 6 +-
tests/qemu-iotests/041 | 66 ++----
tests/qemu-iotests/093 | 89 ++++---
tests/qemu-iotests/132 | 59 +++++
tests/qemu-iotests/132.out | 5 +
tests/qemu-iotests/group | 1 +
tests/qemu-iotests/iotests.py | 23 ++
tests/test-aio.c | 19 +-
tests/test-throttle.c | 161 +++++++++----
util/throttle.c | 81 ++++---
26 files changed, 1144 insertions(+), 301 deletions(-)
create mode 100644 block/throttle-groups.c
create mode 100644 include/block/throttle-groups.h
create mode 100644 tests/qemu-iotests/132
create mode 100644 tests/qemu-iotests/132.out
--
2.4.2
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2014-06-02 13:56 Kevin Wolf
@ 2014-06-02 14:46 ` Peter Maydell
0 siblings, 0 replies; 40+ messages in thread
From: Peter Maydell @ 2014-06-02 14:46 UTC (permalink / raw)
To: Kevin Wolf; +Cc: QEMU Developers
On 2 June 2014 14:56, Kevin Wolf <kwolf@redhat.com> wrote:
> The following changes since commit d7d3d6092cb7edc75dc49fb90c86dd5425ab4805:
>
> Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-peter' into staging (2014-05-28 18:38:39 +0100)
>
> are available in the git repository at:
>
>
> git://repo.or.cz/qemu/kevin.git tags/for-upstream
>
> for you to fetch changes up to 55d492d7602c27cabb605f42e72c755de1c186c1:
>
> qemu-img: Report error even with --oformat=json (2014-06-02 13:58:40 +0200)
>
> ----------------------------------------------------------------
> Block patches
>
> ----------------------------------------------------------------
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 00/17] Block patches
@ 2014-06-02 13:56 Kevin Wolf
2014-06-02 14:46 ` Peter Maydell
0 siblings, 1 reply; 40+ messages in thread
From: Kevin Wolf @ 2014-06-02 13:56 UTC (permalink / raw)
To: qemu-devel; +Cc: kwolf
The following changes since commit d7d3d6092cb7edc75dc49fb90c86dd5425ab4805:
Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-peter' into staging (2014-05-28 18:38:39 +0100)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git tags/for-upstream
for you to fetch changes up to 55d492d7602c27cabb605f42e72c755de1c186c1:
qemu-img: Report error even with --oformat=json (2014-06-02 13:58:40 +0200)
----------------------------------------------------------------
Block patches
----------------------------------------------------------------
Fam Zheng (1):
vmdk: Fix local_err in vmdk_create
Markus Armbruster (14):
qemu-img: Plug memory leak on block option help error path
block/vvfat: Plug memory leak in enable_write_target()
qcow2: Plug memory leak on qcow2_invalidate_cache() error paths
block: Plug memory leak on brv_open_image() error path
qemu-io: Support multiple -o in open command
qemu-io: Plug memory leak in open command
qemu-io: Don't print NULL when open without non-option arg fails
blockdev: Plug memory leak in blockdev_init()
blockdev: Plug memory leak in drive_init()
block/qapi: Plug memory leak in dump_qobject() case QTYPE_QERROR
block/vvfat: Plug memory leak in check_directory_consistency()
block/vvfat: Plug memory leak in read_directory()
block/sheepdog: Plug memory leak in sd_snapshot_create()
qemu-img: Plug memory leak in convert command
Max Reitz (1):
qemu-img: Report error even with --oformat=json
Peter Maydell (1):
block/raw-posix.c: Avoid nonstandard LONG_LONG_MAX
block.c | 1 +
block/qapi.c | 1 +
block/qcow2.c | 3 +--
block/raw-posix.c | 2 +-
block/sheepdog.c | 4 ++--
block/vmdk.c | 8 ++++----
block/vvfat.c | 7 +++++--
blockdev.c | 7 +++++--
qemu-img.c | 7 +++----
qemu-io.c | 22 +++++++++++++++-------
10 files changed, 38 insertions(+), 24 deletions(-)
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2014-05-09 19:03 Stefan Hajnoczi
@ 2014-05-13 10:32 ` Peter Maydell
0 siblings, 0 replies; 40+ messages in thread
From: Peter Maydell @ 2014-05-13 10:32 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: QEMU Developers
On 9 May 2014 20:03, Stefan Hajnoczi <stefanha@redhat.com> wrote:
> The following changes since commit 43cbeffb19877c62cbe0aaf08b2f235d98d71340:
>
> Merge remote-tracking branch 'remotes/stefanha/tags/tracing-pull-request' into staging (2014-05-08 12:38:01 +0100)
>
> are available in the git repository at:
>
>
> git://github.com/stefanha/qemu.git tags/block-pull-request
>
> for you to fetch changes up to 5a007547df76446ab891df93ebc55749716609bf:
>
> glib: fix g_poll early timeout on windows (2014-05-09 20:57:35 +0200)
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 00/17] Block patches
@ 2014-05-09 19:03 Stefan Hajnoczi
2014-05-13 10:32 ` Peter Maydell
0 siblings, 1 reply; 40+ messages in thread
From: Stefan Hajnoczi @ 2014-05-09 19:03 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Stefan Hajnoczi
The following changes since commit 43cbeffb19877c62cbe0aaf08b2f235d98d71340:
Merge remote-tracking branch 'remotes/stefanha/tags/tracing-pull-request' into staging (2014-05-08 12:38:01 +0100)
are available in the git repository at:
git://github.com/stefanha/qemu.git tags/block-pull-request
for you to fetch changes up to 5a007547df76446ab891df93ebc55749716609bf:
glib: fix g_poll early timeout on windows (2014-05-09 20:57:35 +0200)
----------------------------------------------------------------
Block pull request
----------------------------------------------------------------
Fam Zheng (4):
qemu-img: Convert by cluster size if target is compressed
vmdk: Implement .bdrv_write_compressed
vmdk: Implement .bdrv_get_info()
qemu-iotests: Test converting to streamOptimized from small cluster size
Jeff Cody (3):
block: qemu-iotests - add common.qemu, for bash-controlled qemu tests
block: qemu-iotests - update 085 to use common.qemu
block: qemu-iotests - test for live migration
Kevin Wolf (1):
block: Fix open flags with BDRV_O_SNAPSHOT
Kirill Batuzov (1):
vl.c: remove init_clocks call from main
Max Reitz (4):
qcow2: Fix alloc_clusters_noref() overflow detection
iotests: Use configured python
block/nfs: Check for NULL server part
block/raw-posix: Try both FIEMAP and SEEK_HOLE
Mike Day (1):
qemu-img: sort block formats in help message
Peter Krempa (1):
gluster: Correctly propagate errors when volume isn't accessible
Peter Lieven (1):
block/iscsi: bump year in copyright notice
Sangho Park (1):
glib: fix g_poll early timeout on windows
block.c | 34 +++----
block/gluster.c | 7 +-
block/iscsi.c | 2 +-
block/nfs.c | 4 +
block/qcow2-refcount.c | 4 +-
block/raw-posix.c | 127 +++++++++++++++-----------
block/vmdk.c | 35 ++++++++
configure | 6 ++
include/block/block.h | 6 +-
include/glib-compat.h | 9 +-
qemu-img.c | 29 +++++-
qemu-timer.c | 3 +
tests/qemu-iotests/031 | 9 +-
tests/qemu-iotests/036 | 7 +-
tests/qemu-iotests/039 | 19 ++--
tests/qemu-iotests/051 | 4 +
tests/qemu-iotests/051.out | 10 +++
tests/qemu-iotests/054 | 3 +-
tests/qemu-iotests/059 | 7 ++
tests/qemu-iotests/059.out | 8 ++
tests/qemu-iotests/060 | 21 ++---
tests/qemu-iotests/061 | 25 +++---
tests/qemu-iotests/065 | 2 +-
tests/qemu-iotests/083 | 3 +-
tests/qemu-iotests/085 | 73 +++------------
tests/qemu-iotests/091 | 105 ++++++++++++++++++++++
tests/qemu-iotests/091.out | 28 ++++++
tests/qemu-iotests/check | 18 +++-
tests/qemu-iotests/common.qemu | 200 +++++++++++++++++++++++++++++++++++++++++
tests/qemu-iotests/group | 1 +
util/oslib-win32.c | 112 +++++++++++++++++++++++
vl.c | 1 -
32 files changed, 744 insertions(+), 178 deletions(-)
create mode 100755 tests/qemu-iotests/091
create mode 100644 tests/qemu-iotests/091.out
create mode 100644 tests/qemu-iotests/common.qemu
--
1.9.0
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 00/17] Block patches
@ 2013-10-29 16:30 Kevin Wolf
0 siblings, 0 replies; 40+ messages in thread
From: Kevin Wolf @ 2013-10-29 16:30 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit fc8ead74674b7129e8f31c2595c76658e5622197:
Merge remote-tracking branch 'qemu-kvm/uq/master' into staging (2013-10-18 10:03:24 -0700)
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git tags/for-anthony
for you to fetch changes up to a7cf03d4e150abec88f5837461242dc8a0eee189:
qemu-iotests: Fix 051 reference output (2013-10-29 17:05:35 +0100)
----------------------------------------------------------------
Block patches for 1.7.0-rc0
----------------------------------------------------------------
Alexander Graf (1):
ahci: fix win7 hang on boot
Eric Blake (1):
qapi: fix documentation example
Kevin Wolf (5):
exec: Fix bounce buffer allocation in address_space_map()
ide-test: Check what happens with bus mastering disabled
tests: Multiboot mmap test case
block: Avoid unecessary drv->bdrv_getlength() calls
qemu-iotests: Fix 051 reference output
Liu Yuan (2):
sheepdog: explicitly set copies as type uint8_t
sheepdog: pass copy_policy in the request
Max Reitz (5):
qcow2: Restore total_sectors value in save_vmstate
qcow2: Unset zero_beyond_eof in save_vmstate
qemu-iotests: Test for loading VM state from qcow2
qcow2: Flush image after creation
block: Don't copy backing file name on error
Peter Lieven (2):
qemu-img: add special exit code if bdrv_check is not supported
block/vpc: check that the image has not been truncated
Thibaut LAURENT (1):
block: Disable BDRV_O_COPY_ON_READ for the backing file
block.c | 14 +++--
block/qcow2.c | 19 ++++++
block/raw-posix.c | 9 ++-
block/raw-win32.c | 4 +-
block/raw_bsd.c | 1 +
block/sheepdog.c | 30 ++++++----
block/vpc.c | 7 +++
docs/qapi-code-gen.txt | 2 +-
exec.c | 4 +-
hw/ide/ahci.c | 3 +-
include/block/block_int.h | 3 +
qemu-img.c | 2 +-
tests/ide-test.c | 26 +++++++++
tests/multiboot/Makefile | 18 ++++++
tests/multiboot/libc.c | 139 ++++++++++++++++++++++++++++++++++++++++++++
tests/multiboot/libc.h | 61 +++++++++++++++++++
tests/multiboot/link.ld | 19 ++++++
tests/multiboot/mmap.c | 56 ++++++++++++++++++
tests/multiboot/mmap.out | 93 +++++++++++++++++++++++++++++
tests/multiboot/multiboot.h | 66 +++++++++++++++++++++
tests/multiboot/run_test.sh | 81 ++++++++++++++++++++++++++
tests/multiboot/start.S | 51 ++++++++++++++++
tests/qemu-iotests/051.out | 2 +-
tests/qemu-iotests/068 | 65 +++++++++++++++++++++
tests/qemu-iotests/068.out | 11 ++++
tests/qemu-iotests/group | 1 +
26 files changed, 761 insertions(+), 26 deletions(-)
create mode 100644 tests/multiboot/Makefile
create mode 100644 tests/multiboot/libc.c
create mode 100644 tests/multiboot/libc.h
create mode 100644 tests/multiboot/link.ld
create mode 100644 tests/multiboot/mmap.c
create mode 100644 tests/multiboot/mmap.out
create mode 100644 tests/multiboot/multiboot.h
create mode 100755 tests/multiboot/run_test.sh
create mode 100644 tests/multiboot/start.S
create mode 100755 tests/qemu-iotests/068
create mode 100644 tests/qemu-iotests/068.out
^ permalink raw reply [flat|nested] 40+ messages in thread
* Re: [Qemu-devel] [PULL 00/17] Block patches
2010-07-06 15:33 Kevin Wolf
@ 2010-07-06 19:07 ` Anthony Liguori
0 siblings, 0 replies; 40+ messages in thread
From: Anthony Liguori @ 2010-07-06 19:07 UTC (permalink / raw)
To: Kevin Wolf; +Cc: qemu-devel
On 07/06/2010 10:33 AM, Kevin Wolf wrote:
> The following changes since commit 734003e6153b3552b9406ef598a1e67aac4a899e:
> Anthony Liguori (1):
> Merge remote branch 'kwolf/for-anthony' into staging
>
Pulled. Thanks.
Regards,
Anthony Liguori
> are available in the git repository at:
>
> git://repo.or.cz/qemu/kevin.git for-anthony
>
> Kevin Wolf (2):
> qemu-img check: Distinguish different kinds of errors
> qcow2/vdi: Change check to distinguish error cases
>
> MORITA Kazutaka (1):
> block: add sheepdog driver for distributed storage support
>
> Markus Armbruster (13):
> blockdev: Clean up how readonly persists across virtual media change
> block migration: Fix test for read-only drive
> raw-posix: Fix test for host CD-ROM
> fdc: Reject unimplemented error actions
> qdev: Don't hw_error() in qdev_init_nofail()
> scsi: Reject unimplemented error actions
> error: New qemu_opts_loc_restore()
> scsi: Error locations for -drive if=scsi device initialization
> ide: Improve error messages
> ide: Replace IDEState members is_cdrom, is_cf by drive_kind
> ide: Make ide_init_drive() return success
> ide: Reject readonly drives unless CD-ROM
> ide: Reject invalid CHS geometry
>
> john cooper (1):
> Add virtio disk identification support
>
> Makefile.objs | 2 +-
> block-migration.c | 2 +-
> block.c | 9 +-
> block.h | 10 +-
> block/qcow2-refcount.c | 120 ++--
> block/qcow2.c | 4 +-
> block/qcow2.h | 2 +-
> block/raw-posix.c | 17 +-
> block/sheepdog.c | 2036 ++++++++++++++++++++++++++++++++++++++++++++++++
> block/vdi.c | 10 +-
> block_int.h | 7 +-
> blockdev.c | 2 +-
> hw/fdc.c | 22 +-
> hw/ide/core.c | 70 ++-
> hw/ide/internal.h | 9 +-
> hw/ide/macio.c | 2 +-
> hw/ide/microdrive.c | 2 +-
> hw/ide/qdev.c | 13 +-
> hw/qdev.c | 6 +-
> hw/scsi-bus.c | 4 +
> hw/scsi-disk.c | 5 +
> hw/scsi-generic.c | 9 +
> hw/virtio-blk.c | 14 +
> hw/virtio-blk.h | 3 +
> qemu-img.c | 63 ++-
> qemu-option.c | 5 +
> qemu-option.h | 1 +
> 27 files changed, 2308 insertions(+), 141 deletions(-)
> create mode 100644 block/sheepdog.c
>
>
>
^ permalink raw reply [flat|nested] 40+ messages in thread
* [Qemu-devel] [PULL 00/17] Block patches
@ 2010-07-06 15:33 Kevin Wolf
2010-07-06 19:07 ` Anthony Liguori
0 siblings, 1 reply; 40+ messages in thread
From: Kevin Wolf @ 2010-07-06 15:33 UTC (permalink / raw)
To: anthony; +Cc: kwolf, qemu-devel
The following changes since commit 734003e6153b3552b9406ef598a1e67aac4a899e:
Anthony Liguori (1):
Merge remote branch 'kwolf/for-anthony' into staging
are available in the git repository at:
git://repo.or.cz/qemu/kevin.git for-anthony
Kevin Wolf (2):
qemu-img check: Distinguish different kinds of errors
qcow2/vdi: Change check to distinguish error cases
MORITA Kazutaka (1):
block: add sheepdog driver for distributed storage support
Markus Armbruster (13):
blockdev: Clean up how readonly persists across virtual media change
block migration: Fix test for read-only drive
raw-posix: Fix test for host CD-ROM
fdc: Reject unimplemented error actions
qdev: Don't hw_error() in qdev_init_nofail()
scsi: Reject unimplemented error actions
error: New qemu_opts_loc_restore()
scsi: Error locations for -drive if=scsi device initialization
ide: Improve error messages
ide: Replace IDEState members is_cdrom, is_cf by drive_kind
ide: Make ide_init_drive() return success
ide: Reject readonly drives unless CD-ROM
ide: Reject invalid CHS geometry
john cooper (1):
Add virtio disk identification support
Makefile.objs | 2 +-
block-migration.c | 2 +-
block.c | 9 +-
block.h | 10 +-
block/qcow2-refcount.c | 120 ++--
block/qcow2.c | 4 +-
block/qcow2.h | 2 +-
block/raw-posix.c | 17 +-
block/sheepdog.c | 2036 ++++++++++++++++++++++++++++++++++++++++++++++++
block/vdi.c | 10 +-
block_int.h | 7 +-
blockdev.c | 2 +-
hw/fdc.c | 22 +-
hw/ide/core.c | 70 ++-
hw/ide/internal.h | 9 +-
hw/ide/macio.c | 2 +-
hw/ide/microdrive.c | 2 +-
hw/ide/qdev.c | 13 +-
hw/qdev.c | 6 +-
hw/scsi-bus.c | 4 +
hw/scsi-disk.c | 5 +
hw/scsi-generic.c | 9 +
hw/virtio-blk.c | 14 +
hw/virtio-blk.h | 3 +
qemu-img.c | 63 ++-
qemu-option.c | 5 +
qemu-option.h | 1 +
27 files changed, 2308 insertions(+), 141 deletions(-)
create mode 100644 block/sheepdog.c
^ permalink raw reply [flat|nested] 40+ messages in thread
end of thread, other threads:[~2019-08-20 12:41 UTC | newest]
Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-19 16:17 [Qemu-devel] [PULL 00/17] Block patches Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 01/17] LUKS: support preallocation Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 02/17] qemu-img: Fix bdrv_has_zero_init() use in convert Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 03/17] mirror: Fix bdrv_has_zero_init() use Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 04/17] block: Add bdrv_has_zero_init_truncate() Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 05/17] block: Implement .bdrv_has_zero_init_truncate() Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 06/17] block: Use bdrv_has_zero_init_truncate() Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 07/17] qcow2: Fix .bdrv_has_zero_init() Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 08/17] vdi: " Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 09/17] vhdx: " Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 10/17] iotests: Convert to preallocated encrypted qcow2 Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 11/17] iotests: Test convert -n to pre-filled image Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 12/17] iotests: Full mirror to existing non-zero image Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 13/17] vdi: Make block_status recurse for fixed images Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 14/17] vmdk: Make block_status recurse for flat extents Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 15/17] vpc: Do not return RAW from block_status Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 16/17] iotests: Fix 141 when run with qed Max Reitz
2019-08-19 16:17 ` [Qemu-devel] [PULL 17/17] doc: Preallocation does not require writing zeroes Max Reitz
2019-08-20 12:40 ` [Qemu-devel] [PULL 00/17] Block patches Peter Maydell
-- strict thread matches above, loose matches on Subject: below --
2016-09-12 14:08 Stefan Hajnoczi
2016-09-12 15:12 ` Peter Maydell
2016-09-12 15:56 ` Peter Maydell
2016-09-13 1:11 ` Fam Zheng
2016-09-13 8:34 ` Stefan Hajnoczi
2016-09-13 8:53 ` Stefan Hajnoczi
2016-01-20 16:24 Kevin Wolf
2016-01-21 13:42 ` Peter Maydell
2015-07-02 9:19 Stefan Hajnoczi
2015-07-02 12:46 ` Peter Maydell
2015-07-07 13:47 ` Peter Maydell
2015-07-08 13:52 ` Stefan Hajnoczi
2015-06-05 11:57 Stefan Hajnoczi
2015-06-05 13:53 ` Peter Maydell
2014-06-02 13:56 Kevin Wolf
2014-06-02 14:46 ` Peter Maydell
2014-05-09 19:03 Stefan Hajnoczi
2014-05-13 10:32 ` Peter Maydell
2013-10-29 16:30 Kevin Wolf
2010-07-06 15:33 Kevin Wolf
2010-07-06 19:07 ` Anthony Liguori
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).