[Libguestfs] [PATCH v4 18/24] nbd/client: Plumb errp through nbd_receive_replies
Vladimir Sementsov-Ogievskiy
vsementsov at yandex-team.ru
Tue Jun 27 13:31:02 UTC 2023
On 08.06.23 16:56, Eric Blake wrote:
> Instead of ignoring the low-level error just to refabricate our own
> message to pass to the caller, we can just plump the caller's errp
> down to the low level.
>
> Signed-off-by: Eric Blake <eblake at redhat.com>
> ---
>
> v4: new patch [Vladimir]
> ---
> block/nbd.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/block/nbd.c b/block/nbd.c
> index 57123c17f94..c17ce935f17 100644
> --- a/block/nbd.c
> +++ b/block/nbd.c
> @@ -417,7 +417,8 @@ static void coroutine_fn GRAPH_RDLOCK nbd_reconnect_attempt(BDRVNBDState *s)
> reconnect_delay_timer_del(s);
> }
>
> -static coroutine_fn int nbd_receive_replies(BDRVNBDState *s, uint64_t cookie)
> +static coroutine_fn int nbd_receive_replies(BDRVNBDState *s, uint64_t cookie,
> + Error **errp)
> {
> int ret;
> uint64_t ind = COOKIE_TO_INDEX(cookie), ind2;
> @@ -458,9 +459,12 @@ static coroutine_fn int nbd_receive_replies(BDRVNBDState *s, uint64_t cookie)
>
> /* We are under mutex and cookie is 0. We have to do the dirty work. */
> assert(s->reply.cookie == 0);
> - ret = nbd_receive_reply(s->bs, s->ioc, &s->reply, NULL);
> - if (ret <= 0) {
> - ret = ret ? ret : -EIO;
> + ret = nbd_receive_reply(s->bs, s->ioc, &s->reply, errp);
> + if (ret == 0) {
> + ret = -EIO;
> + error_setg(errp, "server dropped connection");
we also need to set errp for further negative returns in the function
> + }
> + if (ret < 0) {
> nbd_channel_error(s, ret);
> return ret;
> }
> @@ -843,9 +847,9 @@ static coroutine_fn int nbd_co_do_receive_one_chunk(
> }
> *request_ret = 0;
>
> - ret = nbd_receive_replies(s, cookie);
> + ret = nbd_receive_replies(s, cookie, errp);
> if (ret < 0) {
> - error_setg(errp, "Connection closed");
> + error_prepend(errp, "Connection closed: ");
> return -EIO;
> }
> assert(s->ioc);
--
Best regards,
Vladimir
More information about the Libguestfs
mailing list