nbd/server: Hoist nbd_reject_length() earlier

No semantic change, but will make it easier for an upcoming patch
to refactor code without having to add forward declarations.  Fix
a poor comment while at it.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20180110230825.18321-2-eblake@redhat.com>
This commit is contained in:
Eric Blake 2018-01-10 17:08:20 -06:00
parent 8e5dc9ba49
commit a16a790770

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2016-2017 Red Hat, Inc.
* Copyright (C) 2016-2018 Red Hat, Inc.
* Copyright (C) 2005 Anthony Liguori <anthony@codemonkey.ws>
*
* Network Block Device Server Side
@ -348,6 +348,34 @@ static int nbd_negotiate_send_info(NBDClient *client, uint32_t opt,
return 0;
}
/* nbd_reject_length: Handle any unexpected payload.
* @fatal requests that we quit talking to the client, even if we are able
* to successfully send an error reply.
* Return:
* -errno transmission error occurred or @fatal was requested, errp is set
* 0 error message successfully sent to client, errp is not set
*/
static int nbd_reject_length(NBDClient *client, uint32_t length,
uint32_t option, bool fatal, Error **errp)
{
int ret;
assert(length);
if (nbd_drop(client->ioc, length, errp) < 0) {
return -EIO;
}
ret = nbd_negotiate_send_rep_err(client->ioc, NBD_REP_ERR_INVALID,
option, errp,
"option '%s' should have zero length",
nbd_opt_lookup(option));
if (fatal && !ret) {
error_setg(errp, "option '%s' should have zero length",
nbd_opt_lookup(option));
return -EINVAL;
}
return ret;
}
/* Handle NBD_OPT_INFO and NBD_OPT_GO.
* Return -errno on error, 0 if ready for next option, and 1 to move
* into transmission phase. */
@ -570,34 +598,6 @@ static QIOChannel *nbd_negotiate_handle_starttls(NBDClient *client,
return QIO_CHANNEL(tioc);
}
/* nbd_reject_length: Handle any unexpected payload.
* @fatal requests that we quit talking to the client, even if we are able
* to successfully send an error to the guest.
* Return:
* -errno transmission error occurred or @fatal was requested, errp is set
* 0 error message successfully sent to client, errp is not set
*/
static int nbd_reject_length(NBDClient *client, uint32_t length,
uint32_t option, bool fatal, Error **errp)
{
int ret;
assert(length);
if (nbd_drop(client->ioc, length, errp) < 0) {
return -EIO;
}
ret = nbd_negotiate_send_rep_err(client->ioc, NBD_REP_ERR_INVALID,
option, errp,
"option '%s' should have zero length",
nbd_opt_lookup(option));
if (fatal && !ret) {
error_setg(errp, "option '%s' should have zero length",
nbd_opt_lookup(option));
return -EINVAL;
}
return ret;
}
/* nbd_negotiate_options
* Process all NBD_OPT_* client option commands, during fixed newstyle
* negotiation.