mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
nbd/server: move nbd_co_send_structured_error up
To be reused in nbd_co_send_sparse_read() in the following patch. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Message-Id: <20180308184636.178534-2-vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
6eba9f01bb
commit
60ace2bacf
1 changed files with 24 additions and 24 deletions
48
nbd/server.c
48
nbd/server.c
|
@ -1342,6 +1342,30 @@ static int coroutine_fn nbd_co_send_structured_read(NBDClient *client,
|
||||||
return nbd_co_send_iov(client, iov, 2, errp);
|
return nbd_co_send_iov(client, iov, 2, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int coroutine_fn nbd_co_send_structured_error(NBDClient *client,
|
||||||
|
uint64_t handle,
|
||||||
|
uint32_t error,
|
||||||
|
const char *msg,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
NBDStructuredError chunk;
|
||||||
|
int nbd_err = system_errno_to_nbd_errno(error);
|
||||||
|
struct iovec iov[] = {
|
||||||
|
{.iov_base = &chunk, .iov_len = sizeof(chunk)},
|
||||||
|
{.iov_base = (char *)msg, .iov_len = msg ? strlen(msg) : 0},
|
||||||
|
};
|
||||||
|
|
||||||
|
assert(nbd_err);
|
||||||
|
trace_nbd_co_send_structured_error(handle, nbd_err,
|
||||||
|
nbd_err_lookup(nbd_err), msg ? msg : "");
|
||||||
|
set_be_chunk(&chunk.h, NBD_REPLY_FLAG_DONE, NBD_REPLY_TYPE_ERROR, handle,
|
||||||
|
sizeof(chunk) - sizeof(chunk.h) + iov[1].iov_len);
|
||||||
|
stl_be_p(&chunk.error, nbd_err);
|
||||||
|
stw_be_p(&chunk.message_length, iov[1].iov_len);
|
||||||
|
|
||||||
|
return nbd_co_send_iov(client, iov, 1 + !!iov[1].iov_len, errp);
|
||||||
|
}
|
||||||
|
|
||||||
static int coroutine_fn nbd_co_send_sparse_read(NBDClient *client,
|
static int coroutine_fn nbd_co_send_sparse_read(NBDClient *client,
|
||||||
uint64_t handle,
|
uint64_t handle,
|
||||||
uint64_t offset,
|
uint64_t offset,
|
||||||
|
@ -1401,30 +1425,6 @@ static int coroutine_fn nbd_co_send_sparse_read(NBDClient *client,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int coroutine_fn nbd_co_send_structured_error(NBDClient *client,
|
|
||||||
uint64_t handle,
|
|
||||||
uint32_t error,
|
|
||||||
const char *msg,
|
|
||||||
Error **errp)
|
|
||||||
{
|
|
||||||
NBDStructuredError chunk;
|
|
||||||
int nbd_err = system_errno_to_nbd_errno(error);
|
|
||||||
struct iovec iov[] = {
|
|
||||||
{.iov_base = &chunk, .iov_len = sizeof(chunk)},
|
|
||||||
{.iov_base = (char *)msg, .iov_len = msg ? strlen(msg) : 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
assert(nbd_err);
|
|
||||||
trace_nbd_co_send_structured_error(handle, nbd_err,
|
|
||||||
nbd_err_lookup(nbd_err), msg ? msg : "");
|
|
||||||
set_be_chunk(&chunk.h, NBD_REPLY_FLAG_DONE, NBD_REPLY_TYPE_ERROR, handle,
|
|
||||||
sizeof(chunk) - sizeof(chunk.h) + iov[1].iov_len);
|
|
||||||
stl_be_p(&chunk.error, nbd_err);
|
|
||||||
stw_be_p(&chunk.message_length, iov[1].iov_len);
|
|
||||||
|
|
||||||
return nbd_co_send_iov(client, iov, 1 + !!iov[1].iov_len, errp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* nbd_co_receive_request
|
/* nbd_co_receive_request
|
||||||
* Collect a client request. Return 0 if request looks valid, -EIO to drop
|
* Collect a client request. Return 0 if request looks valid, -EIO to drop
|
||||||
* connection right away, and any other negative value to report an error to
|
* connection right away, and any other negative value to report an error to
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue