23.08.2019 17:37, Eric Blake wrote: > The client side is fairly straightforward: if the server advertised > fast zero support, then we can map that to BDRV_REQ_NO_FALLBACK > support. A server that advertises FAST_ZERO but not WRITE_ZEROES > is technically broken, but we can ignore that situation as it does > not change our behavior. > > Signed-off-by: Eric Blake <ebl...@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> > > --- > > Perhaps this is worth merging with the previous patch. > --- > block/nbd.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/block/nbd.c b/block/nbd.c > index beed46fb3414..8339d7106366 100644 > --- a/block/nbd.c > +++ b/block/nbd.c > @@ -1044,6 +1044,10 @@ static int > nbd_client_co_pwrite_zeroes(BlockDriverState *bs, int64_t offset, > if (!(flags & BDRV_REQ_MAY_UNMAP)) { > request.flags |= NBD_CMD_FLAG_NO_HOLE; > } > + if (flags & BDRV_REQ_NO_FALLBACK) { > + assert(s->info.flags & NBD_FLAG_SEND_FAST_ZERO); > + request.flags |= NBD_CMD_FLAG_FAST_ZERO; > + } > > if (!bytes) { > return 0; > @@ -1239,6 +1243,9 @@ static int nbd_client_connect(BlockDriverState *bs, > Error **errp) > } > if (s->info.flags & NBD_FLAG_SEND_WRITE_ZEROES) { > bs->supported_zero_flags |= BDRV_REQ_MAY_UNMAP; > + if (s->info.flags & NBD_FLAG_SEND_FAST_ZERO) { > + bs->supported_zero_flags |= BDRV_REQ_NO_FALLBACK; > + } > } > > s->sioc = sioc; > -- Best regards, Vladimir