[Libguestfs] [nbdkit PATCH 2/4] nbd: Normalize return values of can_*
Richard W.M. Jones
rjones at redhat.com
Tue Mar 17 08:12:55 UTC 2020
On Mon, Mar 16, 2020 at 10:36:15PM -0500, Eric Blake wrote:
> Although nbdkit documents that any positive value should be treated as
> success to the .can_* callbacks, we had a window of releases where
> anything other than 1 could trigger an assertion failure, fixed in the
> previous patch. Update what we return to avoid tripping the bug in
> broken nbdkit.
>
> Our return value has been latent since 0e8e8eb11d (v1.1.17), but the
> assertion failures did not occur until c306fa93ab and neighboring
> commits (v1.15.1). As v1.13.6 was the point where we started
> preferring builds against libnbd, where we always returned 1 on
> success, the problem was not detected until now; but it is still in
> the wild for any user mixing old plugins with new libnbd.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
> plugins/nbd/nbd-standalone.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/plugins/nbd/nbd-standalone.c b/plugins/nbd/nbd-standalone.c
> index cbf9dae7..4230ecd9 100644
> --- a/plugins/nbd/nbd-standalone.c
> +++ b/plugins/nbd/nbd-standalone.c
> @@ -1,5 +1,5 @@
> /* nbdkit
> - * Copyright (C) 2017-2019 Red Hat Inc.
> + * Copyright (C) 2017-2020 Red Hat Inc.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions are
> @@ -1175,7 +1175,7 @@ nbd_can_flush (void *handle)
> {
> struct handle *h = handle;
>
> - return h->flags & NBD_FLAG_SEND_FLUSH;
> + return !!(h->flags & NBD_FLAG_SEND_FLUSH);
> }
>
> static int
> @@ -1183,7 +1183,7 @@ nbd_is_rotational (void *handle)
> {
> struct handle *h = handle;
>
> - return h->flags & NBD_FLAG_ROTATIONAL;
> + return !!(h->flags & NBD_FLAG_ROTATIONAL);
> }
>
> static int
> @@ -1191,7 +1191,7 @@ nbd_can_trim (void *handle)
> {
> struct handle *h = handle;
>
> - return h->flags & NBD_FLAG_SEND_TRIM;
> + return !!(h->flags & NBD_FLAG_SEND_TRIM);
> }
>
> static int
> @@ -1199,7 +1199,7 @@ nbd_can_zero (void *handle)
> {
> struct handle *h = handle;
>
> - return h->flags & NBD_FLAG_SEND_WRITE_ZEROES;
> + return !!(h->flags & NBD_FLAG_SEND_WRITE_ZEROES);
> }
>
> static int
> @@ -1215,7 +1215,7 @@ nbd_can_multi_conn (void *handle)
> {
> struct handle *h = handle;
>
> - return h->flags & NBD_FLAG_CAN_MULTI_CONN;
> + return !!(h->flags & NBD_FLAG_CAN_MULTI_CONN);
> }
>
> static int
While I don't like the idea of modifying plugins to fix broken nbdkit
behaviour, you make a good case for this being safer, so:
ACK
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages. http://libguestfs.org
More information about the Libguestfs
mailing list