qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] file-win32: Fix "locking" option
@ 2020-09-07  9:27 Kevin Wolf
  2020-09-07  9:35 ` Philippe Mathieu-Daudé
  2020-09-07 10:13 ` Max Reitz
  0 siblings, 2 replies; 3+ messages in thread
From: Kevin Wolf @ 2020-09-07  9:27 UTC (permalink / raw)
  To: qemu-block; +Cc: kwolf, sw, luoyonggang, qemu-devel, mreitz

The intended behaviour was that locking=off/auto work and have no
effect (to remain compatible with file-posix), whereas locking=on would
return an error. Unfortunately, the code forgot to remove "locking" from
the options QDict, so any attempt to use the option would fail.

Replace the option parsing code for "locking" with something that is
part of the raw_runtime_opts QemuOptsList (so it is properly removed
from the QDict) and looks more like file-posix.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 block/file-win32.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/block/file-win32.c b/block/file-win32.c
index ab69bd811a..e2900c3a51 100644
--- a/block/file-win32.c
+++ b/block/file-win32.c
@@ -299,6 +299,11 @@ static QemuOptsList raw_runtime_opts = {
             .type = QEMU_OPT_STRING,
             .help = "host AIO implementation (threads, native)",
         },
+        {
+            .name = "locking",
+            .type = QEMU_OPT_STRING,
+            .help = "file locking mode (on/off/auto, default: auto)",
+        },
         { /* end of list */ }
     },
 };
@@ -333,6 +338,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
     Error *local_err = NULL;
     const char *filename;
     bool use_aio;
+    OnOffAuto locking;
     int ret;
 
     s->type = FTYPE_FILE;
@@ -343,10 +349,24 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
         goto fail;
     }
 
-    if (qdict_get_try_bool(options, "locking", false)) {
+    locking = qapi_enum_parse(&OnOffAuto_lookup,
+                              qemu_opt_get(opts, "locking"),
+                              ON_OFF_AUTO_AUTO, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        ret = -EINVAL;
+        goto fail;
+    }
+    switch (locking) {
+    case ON_OFF_AUTO_ON:
         error_setg(errp, "locking=on is not supported on Windows");
         ret = -EINVAL;
         goto fail;
+    case ON_OFF_AUTO_OFF:
+    case ON_OFF_AUTO_AUTO:
+        break;
+    default:
+        g_assert_not_reached();
     }
 
     filename = qemu_opt_get(opts, "filename");
-- 
2.25.4



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] file-win32: Fix "locking" option
  2020-09-07  9:27 [PATCH] file-win32: Fix "locking" option Kevin Wolf
@ 2020-09-07  9:35 ` Philippe Mathieu-Daudé
  2020-09-07 10:13 ` Max Reitz
  1 sibling, 0 replies; 3+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-09-07  9:35 UTC (permalink / raw)
  To: Kevin Wolf, qemu-block; +Cc: sw, luoyonggang, qemu-devel, mreitz

On 9/7/20 11:27 AM, Kevin Wolf wrote:
> The intended behaviour was that locking=off/auto work and have no
> effect (to remain compatible with file-posix), whereas locking=on would
> return an error. Unfortunately, the code forgot to remove "locking" from
> the options QDict, so any attempt to use the option would fail.
> 
> Replace the option parsing code for "locking" with something that is
> part of the raw_runtime_opts QemuOptsList (so it is properly removed
> from the QDict) and looks more like file-posix.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---
>  block/file-win32.c | 22 +++++++++++++++++++++-
>  1 file changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/block/file-win32.c b/block/file-win32.c
> index ab69bd811a..e2900c3a51 100644
> --- a/block/file-win32.c
> +++ b/block/file-win32.c
> @@ -299,6 +299,11 @@ static QemuOptsList raw_runtime_opts = {
>              .type = QEMU_OPT_STRING,
>              .help = "host AIO implementation (threads, native)",
>          },
> +        {
> +            .name = "locking",
> +            .type = QEMU_OPT_STRING,
> +            .help = "file locking mode (on/off/auto, default: auto)",
> +        },
>          { /* end of list */ }
>      },
>  };
> @@ -333,6 +338,7 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
>      Error *local_err = NULL;
>      const char *filename;
>      bool use_aio;
> +    OnOffAuto locking;
>      int ret;
>  
>      s->type = FTYPE_FILE;
> @@ -343,10 +349,24 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
>          goto fail;
>      }
>  
> -    if (qdict_get_try_bool(options, "locking", false)) {
> +    locking = qapi_enum_parse(&OnOffAuto_lookup,
> +                              qemu_opt_get(opts, "locking"),
> +                              ON_OFF_AUTO_AUTO, &local_err);
> +    if (local_err) {
> +        error_propagate(errp, local_err);
> +        ret = -EINVAL;
> +        goto fail;
> +    }
> +    switch (locking) {
> +    case ON_OFF_AUTO_ON:
>          error_setg(errp, "locking=on is not supported on Windows");
>          ret = -EINVAL;
>          goto fail;
> +    case ON_OFF_AUTO_OFF:
> +    case ON_OFF_AUTO_AUTO:
> +        break;
> +    default:
> +        g_assert_not_reached();
>      }
>  
>      filename = qemu_opt_get(opts, "filename");
> 



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] file-win32: Fix "locking" option
  2020-09-07  9:27 [PATCH] file-win32: Fix "locking" option Kevin Wolf
  2020-09-07  9:35 ` Philippe Mathieu-Daudé
@ 2020-09-07 10:13 ` Max Reitz
  1 sibling, 0 replies; 3+ messages in thread
From: Max Reitz @ 2020-09-07 10:13 UTC (permalink / raw)
  To: Kevin Wolf, qemu-block; +Cc: sw, luoyonggang, qemu-devel


[-- Attachment #1.1: Type: text/plain, Size: 734 bytes --]

On 07.09.20 11:27, Kevin Wolf wrote:
> The intended behaviour was that locking=off/auto work and have no
> effect (to remain compatible with file-posix), whereas locking=on would
> return an error. Unfortunately, the code forgot to remove "locking" from
> the options QDict, so any attempt to use the option would fail.
> 
> Replace the option parsing code for "locking" with something that is
> part of the raw_runtime_opts QemuOptsList (so it is properly removed
> from the QDict) and looks more like file-posix.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  block/file-win32.c | 22 +++++++++++++++++++++-
>  1 file changed, 21 insertions(+), 1 deletion(-)

Reviewed-by: Max Reitz <mreitz@redhat.com>


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-09-07 10:14 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-07  9:27 [PATCH] file-win32: Fix "locking" option Kevin Wolf
2020-09-07  9:35 ` Philippe Mathieu-Daudé
2020-09-07 10:13 ` Max Reitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).