[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 16/17] blockdev: Don't disable COR automatically
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH v3 16/17] blockdev: Don't disable COR automatically with blockdev-add |
Date: |
Tue, 8 Oct 2013 14:16:33 +0200 |
If a read-only device is configured with copy-on-read=on, the old code
only prints a warning and automatically disables copy on read. Make it
a real error for blockdev-add.
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
block.c | 9 +++++++--
blockdev.c | 31 +++++++++++++++++++++++++++----
2 files changed, 34 insertions(+), 6 deletions(-)
diff --git a/block.c b/block.c
index 93e113a..dc63f02 100644
--- a/block.c
+++ b/block.c
@@ -774,8 +774,13 @@ static int bdrv_open_common(BlockDriverState *bs,
BlockDriverState *file,
}
assert(bs->copy_on_read == 0); /* bdrv_new() and bdrv_close() make it so */
- if (!bs->read_only && (flags & BDRV_O_COPY_ON_READ)) {
- bdrv_enable_copy_on_read(bs);
+ if (flags & BDRV_O_COPY_ON_READ) {
+ if (!bs->read_only) {
+ bdrv_enable_copy_on_read(bs);
+ } else {
+ error_setg(errp, "Can't use copy-on-read on read-only device");
+ return -EINVAL;
+ }
}
if (filename != NULL) {
diff --git a/blockdev.c b/blockdev.c
index b39f2e7..61dbf26 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -514,10 +514,6 @@ static DriveInfo *blockdev_init(QDict *bs_opts,
bdrv_flags |= ro ? 0 : BDRV_O_RDWR;
- if (ro && copy_on_read) {
- error_report("warning: disabling copy_on_read on read-only drive");
- }
-
QINCREF(bs_opts);
ret = bdrv_open(dinfo->bdrv, file, bs_opts, bdrv_flags, drv, &error);
@@ -605,6 +601,18 @@ QemuOptsList qemu_legacy_drive_opts = {
.type = QEMU_OPT_STRING,
.help = "pci address (virtio only)",
},
+
+ /* Options that are passed on, but have special semantics with -drive
*/
+ {
+ .name = "read-only",
+ .type = QEMU_OPT_BOOL,
+ .help = "open drive file as read-only",
+ },{
+ .name = "copy-on-read",
+ .type = QEMU_OPT_BOOL,
+ .help = "copy read data from backing file into image file",
+ },
+
{ /* end of list */ }
},
};
@@ -620,6 +628,7 @@ DriveInfo *drive_init(QemuOpts *all_opts,
BlockInterfaceType block_default_type)
int cyls, heads, secs, translation;
int max_devs, bus_id, unit_id, index;
const char *devaddr;
+ bool read_only, copy_on_read;
Error *local_err = NULL;
/* Change legacy command line options into QMP ones */
@@ -702,6 +711,20 @@ DriveInfo *drive_init(QemuOpts *all_opts,
BlockInterfaceType block_default_type)
}
}
+ /* copy-on-read is disabled with a warning for read-only devices */
+ read_only = qemu_opt_get_bool(legacy_opts, "read-only", false);
+ copy_on_read = qemu_opt_get_bool(legacy_opts, "copy-on-read", false);
+
+ if (read_only && copy_on_read) {
+ error_report("warning: disabling copy-on-read on read-only drive");
+ copy_on_read = false;
+ }
+
+ qdict_put(bs_opts, "read-only",
+ qstring_from_str(read_only ? "on" : "off"));
+ qdict_put(bs_opts, "copy-on-read",
+ qstring_from_str(copy_on_read ? "on" :"off"));
+
/* Controller type */
value = qemu_opt_get(legacy_opts, "if");
if (value) {
--
1.8.1.4
- [Qemu-devel] [PATCH v3 05/17] blockdev: Separate ID generation from DriveInfo creation, (continued)
- [Qemu-devel] [PATCH v3 05/17] blockdev: Separate ID generation from DriveInfo creation, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 07/17] blockdev: Move parsing of 'media' option to drive_init, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 08/17] blockdev: Move parsing of 'if' option to drive_init, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 09/17] blockdev: Moving parsing of geometry options to drive_init, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 10/17] blockdev: Move parsing of 'boot' option to drive_init, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 11/17] blockdev: Move bus/unit/index processing to drive_init, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 12/17] blockdev: Move virtio-blk device creation to drive_init, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 13/17] blockdev: Remove IF_* check for read-only blockdev_init, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 14/17] qemu-iotests: Check autodel behaviour for device_del, Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 15/17] blockdev: Remove 'media' parameter from blockdev_init(), Kevin Wolf, 2013/10/08
- [Qemu-devel] [PATCH v3 16/17] blockdev: Don't disable COR automatically with blockdev-add,
Kevin Wolf <=
- [Qemu-devel] [PATCH v3 17/17] blockdev: blockdev_init() error conversion, Kevin Wolf, 2013/10/08