mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
blockdev: read-only-mode for blockdev-change-medium
Add an option to qmp_blockdev_change_medium() which allows changing the read-only status of the block device whose medium is changed. Some drives do not have a inherently fixed read-only status; for instance, floppy disks can be set read-only or writable independently of the drive. Some users may find it useful to be able to therefore change the read-only status of a block device when changing the medium. Signed-off-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
1068674927
commit
39ff43d9e1
6 changed files with 72 additions and 4 deletions
22
blockdev.c
22
blockdev.c
|
@ -2145,6 +2145,8 @@ void qmp_blockdev_insert_medium(const char *device, const char *node_name,
|
|||
|
||||
void qmp_blockdev_change_medium(const char *device, const char *filename,
|
||||
bool has_format, const char *format,
|
||||
bool has_read_only,
|
||||
BlockdevChangeReadOnlyMode read_only,
|
||||
Error **errp)
|
||||
{
|
||||
BlockBackend *blk;
|
||||
|
@ -2166,6 +2168,26 @@ void qmp_blockdev_change_medium(const char *device, const char *filename,
|
|||
|
||||
bdrv_flags = blk_get_open_flags_from_root_state(blk);
|
||||
|
||||
if (!has_read_only) {
|
||||
read_only = BLOCKDEV_CHANGE_READ_ONLY_MODE_RETAIN;
|
||||
}
|
||||
|
||||
switch (read_only) {
|
||||
case BLOCKDEV_CHANGE_READ_ONLY_MODE_RETAIN:
|
||||
break;
|
||||
|
||||
case BLOCKDEV_CHANGE_READ_ONLY_MODE_READ_ONLY:
|
||||
bdrv_flags &= ~BDRV_O_RDWR;
|
||||
break;
|
||||
|
||||
case BLOCKDEV_CHANGE_READ_ONLY_MODE_READ_WRITE:
|
||||
bdrv_flags |= BDRV_O_RDWR;
|
||||
break;
|
||||
|
||||
default:
|
||||
abort();
|
||||
}
|
||||
|
||||
if (has_format) {
|
||||
options = qdict_new();
|
||||
qdict_put(options, "driver", qstring_from_str(format));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue