提交 319a56cd 编写于 作者: V Vladimir Sementsov-Ogievskiy 提交者: Eric Blake

block/nbd-client: refactor nbd_co_receive_reply

"NBDReply *reply" parameter of nbd_co_receive_reply is used only
to pass return value for nbd_co_request (reply.error). Remove it
and use function return value instead.
Signed-off-by: NVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: NEric Blake <eblake@redhat.com>
Message-Id: <20170920124507.18841-2-vsementsov@virtuozzo.com>
Signed-off-by: NEric Blake <eblake@redhat.com>
上级 cfa3ad63
...@@ -178,26 +178,26 @@ err: ...@@ -178,26 +178,26 @@ err:
return rc; return rc;
} }
static void nbd_co_receive_reply(NBDClientSession *s, static int nbd_co_receive_reply(NBDClientSession *s,
NBDRequest *request, NBDRequest *request,
NBDReply *reply, QEMUIOVector *qiov)
QEMUIOVector *qiov)
{ {
int ret;
int i = HANDLE_TO_INDEX(s, request->handle); int i = HANDLE_TO_INDEX(s, request->handle);
/* Wait until we're woken up by nbd_read_reply_entry. */ /* Wait until we're woken up by nbd_read_reply_entry. */
s->requests[i].receiving = true; s->requests[i].receiving = true;
qemu_coroutine_yield(); qemu_coroutine_yield();
s->requests[i].receiving = false; s->requests[i].receiving = false;
*reply = s->reply; if (s->reply.handle != request->handle || !s->ioc || s->quit) {
if (reply->handle != request->handle || !s->ioc || s->quit) { ret = -EIO;
reply->error = EIO;
} else { } else {
if (qiov && reply->error == 0) { ret = -s->reply.error;
if (qiov && s->reply.error == 0) {
assert(request->len == iov_size(qiov->iov, qiov->niov)); assert(request->len == iov_size(qiov->iov, qiov->niov));
if (qio_channel_readv_all(s->ioc, qiov->iov, qiov->niov, if (qio_channel_readv_all(s->ioc, qiov->iov, qiov->niov,
NULL) < 0) { NULL) < 0) {
reply->error = EIO; ret = -EIO;
s->quit = true; s->quit = true;
} }
} }
...@@ -217,6 +217,8 @@ static void nbd_co_receive_reply(NBDClientSession *s, ...@@ -217,6 +217,8 @@ static void nbd_co_receive_reply(NBDClientSession *s,
s->in_flight--; s->in_flight--;
qemu_co_queue_next(&s->free_sema); qemu_co_queue_next(&s->free_sema);
qemu_co_mutex_unlock(&s->send_mutex); qemu_co_mutex_unlock(&s->send_mutex);
return ret;
} }
static int nbd_co_request(BlockDriverState *bs, static int nbd_co_request(BlockDriverState *bs,
...@@ -224,7 +226,6 @@ static int nbd_co_request(BlockDriverState *bs, ...@@ -224,7 +226,6 @@ static int nbd_co_request(BlockDriverState *bs,
QEMUIOVector *qiov) QEMUIOVector *qiov)
{ {
NBDClientSession *client = nbd_get_client_session(bs); NBDClientSession *client = nbd_get_client_session(bs);
NBDReply reply;
int ret; int ret;
assert(!qiov || request->type == NBD_CMD_WRITE || assert(!qiov || request->type == NBD_CMD_WRITE ||
...@@ -232,12 +233,11 @@ static int nbd_co_request(BlockDriverState *bs, ...@@ -232,12 +233,11 @@ static int nbd_co_request(BlockDriverState *bs,
ret = nbd_co_send_request(bs, request, ret = nbd_co_send_request(bs, request,
request->type == NBD_CMD_WRITE ? qiov : NULL); request->type == NBD_CMD_WRITE ? qiov : NULL);
if (ret < 0) { if (ret < 0) {
reply.error = -ret; return ret;
} else {
nbd_co_receive_reply(client, request, &reply,
request->type == NBD_CMD_READ ? qiov : NULL);
} }
return -reply.error;
return nbd_co_receive_reply(client, request,
request->type == NBD_CMD_READ ? qiov : NULL);
} }
int nbd_client_co_preadv(BlockDriverState *bs, uint64_t offset, int nbd_client_co_preadv(BlockDriverState *bs, uint64_t offset,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册