[Libguestfs] [nbdkit PATCH 3/6] retry: Check next_ops->can_FOO on retry
Eric Blake
eblake at redhat.com
Wed Oct 2 16:22:25 UTC 2019
On 9/30/19 10:17 PM, Eric Blake wrote:
> After a retry, if the second connection has fewer permissions than the
> first, but we blindly call next_ops->FOO, we end up triggering an
> assertion failure in backend.c. This is particularly noticeable when
> the force_readonly flag is in effect, as that makes it much easier for
> there to be fewer permissions than before.
>
> Add testsuite coverage of pwrite to demonstrate.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
> filters/retry/retry.c | 58 ++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 52 insertions(+), 6 deletions(-)
> @@ -307,7 +348,12 @@ retry_cache (struct nbdkit_next_ops *next_ops, void *nxdata,
> int r;
>
> again:
> - r = next_ops->cache (nxdata, count, offset, flags, err);
> + if (next_ops->can_cache (nxdata) != 1) {
This actually needs to be <= NBDKIT_CACHE_NONE (otherwise, it penalizes
a change between EMULATE and NATIVE).
I'm also suspecting that I'll have to check can_fua and can_fast_zero
for proper usage, but that will be a followup patch.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
More information about the Libguestfs
mailing list