mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-23 16:08:41 -07:00
nbd: Support shorter handshake
The NBD Protocol allows the server and client to mutually agree on a shorter handshake (omit the 124 bytes of reserved 0), via the server advertising NBD_FLAG_NO_ZEROES and the client acknowledging with NBD_FLAG_C_NO_ZEROES (only possible in newstyle, whether or not it is fixed newstyle). It doesn't shave much off the wire, but we might as well implement it. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Alex Bligh <alex@alex.org.uk> Message-Id: <1476469998-28592-13-git-send-email-eblake@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
75368aab9b
commit
c203c59ad9
3 changed files with 22 additions and 7 deletions
|
|
@ -440,6 +440,7 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *name, uint16_t *flags,
|
|||
char buf[256];
|
||||
uint64_t magic, s;
|
||||
int rc;
|
||||
bool zeroes = true;
|
||||
|
||||
TRACE("Receiving negotiation tlscreds=%p hostname=%s.",
|
||||
tlscreds, hostname ? hostname : "<null>");
|
||||
|
|
@ -504,6 +505,11 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *name, uint16_t *flags,
|
|||
TRACE("Server supports fixed new style");
|
||||
clientflags |= NBD_FLAG_C_FIXED_NEWSTYLE;
|
||||
}
|
||||
if (globalflags & NBD_FLAG_NO_ZEROES) {
|
||||
zeroes = false;
|
||||
TRACE("Server supports no zeroes");
|
||||
clientflags |= NBD_FLAG_C_NO_ZEROES;
|
||||
}
|
||||
/* client requested flags */
|
||||
clientflags = cpu_to_be32(clientflags);
|
||||
if (write_sync(ioc, &clientflags, sizeof(clientflags)) !=
|
||||
|
|
@ -591,7 +597,7 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *name, uint16_t *flags,
|
|||
}
|
||||
|
||||
TRACE("Size is %" PRIu64 ", export flags %" PRIx16, *size, *flags);
|
||||
if (drop_sync(ioc, 124) != 124) {
|
||||
if (zeroes && drop_sync(ioc, 124) != 124) {
|
||||
error_setg(errp, "Failed to read reserved block");
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue