nbd/server: Don't fail NBD_OPT_INFO for byte-aligned sources
In commit 0c1d50bd, I added a couple of TODO comments about whether we consult bl.request_alignment when responding to NBD_OPT_INFO. At the time, qemu as server was hard-coding an advertised alignment of 512 to clients that promised to obey constraints, and there was no function for getting at a device's preferred alignment. But in hindsight, advertising 512 when the block device prefers 1 caused other compliance problems, and commit b0245d64 changed one of the two TODO comments to advertise a more accurate alignment. Time to fix the other TODO. Doesn't really impact qemu as client (our normal client doesn't use NBD_OPT_INFO, and qemu-nbd --list promises to obey block sizes), but it might prove useful to other clients. Fixes: b0245d64 Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <20190403030526.12258-4-eblake@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
This commit is contained in:
parent
6e280648d2
commit
099fbcd65c
13
nbd/server.c
13
nbd/server.c
@ -643,11 +643,14 @@ static int nbd_negotiate_handle_info(NBDClient *client, uint16_t myflags,
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* If the client is just asking for NBD_OPT_INFO, but forgot to
|
||||
* request block sizes, return an error.
|
||||
* TODO: consult blk_bs(blk)->request_align, and only error if it
|
||||
* is not 1? */
|
||||
if (client->opt == NBD_OPT_INFO && !blocksize) {
|
||||
/*
|
||||
* If the client is just asking for NBD_OPT_INFO, but forgot to
|
||||
* request block sizes in a situation that would impact
|
||||
* performance, then return an error. But for NBD_OPT_GO, we
|
||||
* tolerate all clients, regardless of alignments.
|
||||
*/
|
||||
if (client->opt == NBD_OPT_INFO && !blocksize &&
|
||||
blk_get_request_alignment(exp->blk) > 1) {
|
||||
return nbd_negotiate_send_rep_err(client,
|
||||
NBD_REP_ERR_BLOCK_SIZE_REQD,
|
||||
errp,
|
||||
|
Loading…
x
Reference in New Issue
Block a user