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:
parent
8e5dc9ba49
commit
a16a790770
58
nbd/server.c
58
nbd/server.c
@ -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>
|
* Copyright (C) 2005 Anthony Liguori <anthony@codemonkey.ws>
|
||||||
*
|
*
|
||||||
* Network Block Device Server Side
|
* Network Block Device Server Side
|
||||||
@ -348,6 +348,34 @@ static int nbd_negotiate_send_info(NBDClient *client, uint32_t opt,
|
|||||||
return 0;
|
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.
|
/* Handle NBD_OPT_INFO and NBD_OPT_GO.
|
||||||
* Return -errno on error, 0 if ready for next option, and 1 to move
|
* Return -errno on error, 0 if ready for next option, and 1 to move
|
||||||
* into transmission phase. */
|
* into transmission phase. */
|
||||||
@ -570,34 +598,6 @@ static QIOChannel *nbd_negotiate_handle_starttls(NBDClient *client,
|
|||||||
return QIO_CHANNEL(tioc);
|
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
|
/* nbd_negotiate_options
|
||||||
* Process all NBD_OPT_* client option commands, during fixed newstyle
|
* Process all NBD_OPT_* client option commands, during fixed newstyle
|
||||||
* negotiation.
|
* negotiation.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user