On Mon, Sep 9, 2024 at 12:36 AM Akihiko Odaki <akihiko.od...@daynix.com> wrote: > > On 2024/09/09 10:58, Joelle van Dyne wrote: > > New optional argument for 'blockdev-change-medium' QAPI command to allow > > the caller to specify if they wish to enable file locking. > > > > Signed-off-by: Joelle van Dyne <j...@getutm.app> > > --- > > qapi/block.json | 23 ++++++++++++++++++++++- > > block/monitor/block-hmp-cmds.c | 2 +- > > block/qapi-sysemu.c | 22 ++++++++++++++++++++++ > > ui/cocoa.m | 1 + > > 4 files changed, 46 insertions(+), 2 deletions(-) > > > > diff --git a/qapi/block.json b/qapi/block.json > > index e66666f5c6..35e8e2e191 100644 > > --- a/qapi/block.json > > +++ b/qapi/block.json > > @@ -309,6 +309,23 @@ > > { 'enum': 'BlockdevChangeReadOnlyMode', > > 'data': ['retain', 'read-only', 'read-write'] } > > > > +## > > +# @BlockdevChangeFileLockingMode: > > +# > > +# Specifies the new locking mode of a file image passed to the > > +# @blockdev-change-medium command. > > +# > > +# @auto: Use locking if API is available > > +# > > +# @off: Disable file image locking > > +# > > +# @on: Enable file image locking > > +# > > +# Since: 9.2 > > +## > > +{ 'enum': 'BlockdevChangeFileLockingMode', > > + 'data': ['auto', 'off', 'on'] } > > You can use OnOffAuto type instead of defining your own.
This can be done. I had thought that defining a new type makes the argument more explicit about the meaning. > > > + > > ## > > # @blockdev-change-medium: > > # > > @@ -330,6 +347,9 @@ > > # @read-only-mode: change the read-only mode of the device; defaults > > # to 'retain' > > # > > +# @file-locking-mode: change the locking mode of the file image; defaults > > +# to 'auto' (since: 9.2) > > +# > > # @force: if false (the default), an eject request through > > # blockdev-open-tray will be sent to the guest if it has locked > > # the tray (and the tray will not be opened immediately); if true, > > @@ -378,7 +398,8 @@ > > 'filename': 'str', > > '*format': 'str', > > '*force': 'bool', > > - '*read-only-mode': 'BlockdevChangeReadOnlyMode' } } > > + '*read-only-mode': 'BlockdevChangeReadOnlyMode', > > + '*file-locking-mode': 'BlockdevChangeFileLockingMode' } } > > > > ## > > # @DEVICE_TRAY_MOVED: > > diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c > > index bdf2eb50b6..ff64020a80 100644 > > --- a/block/monitor/block-hmp-cmds.c > > +++ b/block/monitor/block-hmp-cmds.c > > @@ -1007,5 +1007,5 @@ void hmp_change_medium(Monitor *mon, const char > > *device, const char *target, > > } > > > > qmp_blockdev_change_medium(device, NULL, target, arg, true, force, > > - !!read_only, read_only_mode, errp); > > + !!read_only, read_only_mode, false, 0, > > errp); > > } > > diff --git a/block/qapi-sysemu.c b/block/qapi-sysemu.c > > index e4282631d2..8064bdfb3a 100644 > > --- a/block/qapi-sysemu.c > > +++ b/block/qapi-sysemu.c > > @@ -311,6 +311,8 @@ void qmp_blockdev_change_medium(const char *device, > > bool has_force, bool force, > > bool has_read_only, > > BlockdevChangeReadOnlyMode read_only, > > + bool has_file_locking_mode, > > + BlockdevChangeFileLockingMode > > file_locking_mode, > > Error **errp) > > { > > BlockBackend *blk; > > @@ -362,6 +364,26 @@ void qmp_blockdev_change_medium(const char *device, > > qdict_put_str(options, "driver", format); > > } > > > > + if (!has_file_locking_mode) { > > + file_locking_mode = BLOCKDEV_CHANGE_FILE_LOCKING_MODE_AUTO; > > + } > > + > > + switch (file_locking_mode) { > > + case BLOCKDEV_CHANGE_FILE_LOCKING_MODE_AUTO: > > + break; > > + > > + case BLOCKDEV_CHANGE_FILE_LOCKING_MODE_OFF: > > + qdict_put_str(options, "file.locking", "off"); > > + break; > > + > > + case BLOCKDEV_CHANGE_FILE_LOCKING_MODE_ON: > > + qdict_put_str(options, "file.locking", "on"); > > + break; > > + > > + default: > > + abort(); > > + } > > + > > medium_bs = bdrv_open(filename, NULL, options, bdrv_flags, errp); > > > > if (!medium_bs) { > > diff --git a/ui/cocoa.m b/ui/cocoa.m > > index 4c2dd33532..6e73c6e13e 100644 > > --- a/ui/cocoa.m > > +++ b/ui/cocoa.m > > @@ -1611,6 +1611,7 @@ - (void)changeDeviceMedia:(id)sender > > "raw", > > true, false, > > false, 0, > > + false, 0, > > This change is irrelevant. This change is needed otherwise QEMU will not compile. > > Regards, > Akihiko Odaki