[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v2 5/7] block: Use 'detect-zeroes' option for 'block
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PATCH v2 5/7] block: Use 'detect-zeroes' option for 'blockdev-change-medium' |
Date: |
Fri, 23 Sep 2016 16:32:39 +0200 |
Instead of modifying the new BDS after it has been opened, use the newly
supported 'detect-zeroes' option in bdrv_open_common() so that all
requirements are checked (detect-zeroes=unmap requires discard=unmap).
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
block/block-backend.c | 9 ++++-----
blockdev.c | 9 ++++++---
include/sysemu/block-backend.h | 2 +-
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/block/block-backend.c b/block/block-backend.c
index 0bd19ab..bc14f96 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1592,13 +1592,12 @@ void blk_update_root_state(BlockBackend *blk)
}
/*
- * Applies the information in the root state to the given BlockDriverState.
This
- * does not include the flags which have to be specified for bdrv_open(), use
- * blk_get_open_flags_from_root_state() to inquire them.
+ * Returns the detect-zeroes setting to be used for bdrv_open() of a
+ * BlockDriverState which is supposed to inherit the root state.
*/
-void blk_apply_root_state(BlockBackend *blk, BlockDriverState *bs)
+bool blk_get_detect_zeroes_from_root_state(BlockBackend *blk)
{
- bs->detect_zeroes = blk->root_state.detect_zeroes;
+ return blk->root_state.detect_zeroes;
}
/*
diff --git a/blockdev.c b/blockdev.c
index 7baf5bb..d84717d 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2546,6 +2546,7 @@ void qmp_blockdev_change_medium(bool has_device, const
char *device,
BlockBackend *blk;
BlockDriverState *medium_bs = NULL;
int bdrv_flags;
+ bool detect_zeroes;
int rc;
QDict *options = NULL;
Error *err = NULL;
@@ -2585,8 +2586,12 @@ void qmp_blockdev_change_medium(bool has_device, const
char *device,
abort();
}
+ options = qdict_new();
+ detect_zeroes = blk_get_detect_zeroes_from_root_state(blk);
+ qdict_put(options, "detect-zeroes",
+ qstring_from_str(detect_zeroes ? "on" : "off"));
+
if (has_format) {
- options = qdict_new();
qdict_put(options, "driver", qstring_from_str(format));
}
@@ -2623,8 +2628,6 @@ void qmp_blockdev_change_medium(bool has_device, const
char *device,
goto fail;
}
- blk_apply_root_state(blk, medium_bs);
-
qmp_blockdev_close_tray(has_device, device, has_id, id, errp);
fail:
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 3b29317..07339b7 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -199,7 +199,7 @@ void blk_io_unplug(BlockBackend *blk);
BlockAcctStats *blk_get_stats(BlockBackend *blk);
BlockBackendRootState *blk_get_root_state(BlockBackend *blk);
void blk_update_root_state(BlockBackend *blk);
-void blk_apply_root_state(BlockBackend *blk, BlockDriverState *bs);
+bool blk_get_detect_zeroes_from_root_state(BlockBackend *blk);
int blk_get_open_flags_from_root_state(BlockBackend *blk);
void *blk_aio_get(const AIOCBInfo *aiocb_info, BlockBackend *blk,
--
1.8.3.1
- [Qemu-block] [PATCH v2 1/7] block: Drop aio/cache consistency check from qmp_blockdev_add(), (continued)
- [Qemu-block] [PATCH v2 4/7] block: Parse 'detect-zeroes' in bdrv_open_common(), Kevin Wolf, 2016/09/23
- [Qemu-block] [PATCH v2 5/7] block: Use 'detect-zeroes' option for 'blockdev-change-medium',
Kevin Wolf <=
- [Qemu-block] [PATCH v2 7/7] block: Remove qemu_root_bds_opts, Kevin Wolf, 2016/09/23
- Re: [Qemu-block] [PATCH v2 0/7] block: Make more blockdev-add options work, Max Reitz, 2016/09/26
- Re: [Qemu-block] [PATCH v2 0/7] block: Make more blockdev-add options work, Kevin Wolf, 2016/09/27