30.11.2018 5:32, Eric Blake wrote: > The implementation of x-dirty-bitmap in qemu 3.0 silently > falls back to treating the server as not supporting > NBD_CMD_BLOCK_STATUS if a requested meta_context name was not > negotiated, which in turn means treating the _entire_ image as > data. Since our hack relied on using 'qemu-img map' to view > which portions of the image were dirty by seeing what the > redirected bdrv_block_status() treats as holes, this means > that our fallback treats the entire image as clean. Better > would have been to treat the entire image as dirty, or to fail > to connect because the user's request for a specific context > could not be honored. This patch goes with the latter. > > Signed-off-by: Eric Blake <[email protected]>
Reviewed-by: Vladimir Sementsov-Ogievskiy <[email protected]> > --- > block/nbd-client.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/block/nbd-client.c b/block/nbd-client.c > index 76e9ca3abeb..e6e27dafa6a 100644 > --- a/block/nbd-client.c > +++ b/block/nbd-client.c > @@ -992,6 +992,11 @@ int nbd_client_init(BlockDriverState *bs, > logout("Failed to negotiate with the NBD server\n"); > return ret; > } > + if (x_dirty_bitmap && !client->info.base_allocation) { > + error_setg(errp, "requested x-dirty-bitmap %s not found", > + x_dirty_bitmap); > + return -EINVAL; > + } > if (client->info.flags & NBD_FLAG_READ_ONLY) { > ret = bdrv_apply_auto_read_only(bs, "NBD export is read-only", > errp); > if (ret < 0) { > -- Best regards, Vladimir
