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

Reply via email to