Message ID | 20230608135653.2918540-19-eblake@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | qemu patches for 64-bit NBD extensions | expand |
On Thu, Jun 08, 2023 at 08:56:47AM -0500, 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 plumb (at least I got it right in the subject line...) > down to the low level. > > Signed-off-by: Eric Blake <eblake@redhat.com> > --- >
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@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);
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"); + } + 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);
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@redhat.com> --- v4: new patch [Vladimir] --- block/nbd.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)