Message ID | 20210906190654.183421-2-vsementsov@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | nbd reconnect on open | expand |
On Mon, Sep 06, 2021 at 10:06:46PM +0300, Vladimir Sementsov-Ogievskiy wrote: > When we don't have a connection and blocking is false, we return NULL > but don't set errp. That's wrong. Oops... > > We have two paths for calling nbd_co_establish_connection(): > > 1. nbd_open() -> nbd_do_establish_connection() -> ... > but that will never set blocking=false > > 2. nbd_reconnect_attempt() -> nbd_co_do_establish_connection() -> ... > but that uses errp=NULL > > So, we are safe with our wrong errp policy in > nbd_co_establish_connection(). Still let's fix it. ...phew! Thus, it's not critical to backport. Reviewed-by: Eric Blake <eblake@redhat.com> > > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> > --- > nbd/client-connection.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/nbd/client-connection.c b/nbd/client-connection.c > index 7123b1e189..695f855754 100644 > --- a/nbd/client-connection.c > +++ b/nbd/client-connection.c > @@ -318,6 +318,7 @@ nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info, > } > > if (!blocking) { > + error_setg(errp, "No connection at the moment"); > return NULL; > } > > -- > 2.29.2 >
On Tue, Sep 07, 2021 at 12:44:53PM -0500, Eric Blake wrote: > On Mon, Sep 06, 2021 at 10:06:46PM +0300, Vladimir Sementsov-Ogievskiy wrote: > > When we don't have a connection and blocking is false, we return NULL > > but don't set errp. That's wrong. > > Oops... > > > > > We have two paths for calling nbd_co_establish_connection(): > > > > 1. nbd_open() -> nbd_do_establish_connection() -> ... > > but that will never set blocking=false > > > > 2. nbd_reconnect_attempt() -> nbd_co_do_establish_connection() -> ... > > but that uses errp=NULL > > > > So, we are safe with our wrong errp policy in > > nbd_co_establish_connection(). Still let's fix it. > > ...phew! Thus, it's not critical to backport. > > Reviewed-by: Eric Blake <eblake@redhat.com> Queuing this one through my NBD tree. Given the discussion on 2/9, I'll leave the rest of the series for later.
diff --git a/nbd/client-connection.c b/nbd/client-connection.c index 7123b1e189..695f855754 100644 --- a/nbd/client-connection.c +++ b/nbd/client-connection.c @@ -318,6 +318,7 @@ nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info, } if (!blocking) { + error_setg(errp, "No connection at the moment"); return NULL; }
When we don't have a connection and blocking is false, we return NULL but don't set errp. That's wrong. We have two paths for calling nbd_co_establish_connection(): 1. nbd_open() -> nbd_do_establish_connection() -> ... but that will never set blocking=false 2. nbd_reconnect_attempt() -> nbd_co_do_establish_connection() -> ... but that uses errp=NULL So, we are safe with our wrong errp policy in nbd_co_establish_connection(). Still let's fix it. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> --- nbd/client-connection.c | 1 + 1 file changed, 1 insertion(+)