nbd: Implement client use of NBD FAST_ZERO
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 <eblake@redhat.com> Message-Id: <20190823143726.27062-4-eblake@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
This commit is contained in:
parent
0a4795455c
commit
f061656cc3
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user