[PATCH v11 07/12] vduse: refactor vdpa_dev_add for goto err handling

Eugenio Pérez posted 12 patches 4 weeks, 1 day ago
There is a newer version of this series
[PATCH v11 07/12] vduse: refactor vdpa_dev_add for goto err handling
Posted by Eugenio Pérez 4 weeks, 1 day ago
Next patches introduce more error paths in this function.  Refactor it
so they can be accomodated through gotos.

Acked-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Xie Yongji <xieyongji@bytedance.com>
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
---
v6: New in v6.
---
 drivers/vdpa/vdpa_user/vduse_dev.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c
index 0386434577b5..f7a45f396cf8 100644
--- a/drivers/vdpa/vdpa_user/vduse_dev.c
+++ b/drivers/vdpa/vdpa_user/vduse_dev.c
@@ -2171,21 +2171,27 @@ static int vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
 						  dev->bounce_size);
 	mutex_unlock(&dev->domain_lock);
 	if (!dev->domain) {
-		put_device(&dev->vdev->vdpa.dev);
-		return -ENOMEM;
+		ret = -ENOMEM;
+		goto domain_err;
 	}
 
 	ret = _vdpa_register_device(&dev->vdev->vdpa, dev->vq_num);
 	if (ret) {
-		put_device(&dev->vdev->vdpa.dev);
-		mutex_lock(&dev->domain_lock);
-		vduse_domain_destroy(dev->domain);
-		dev->domain = NULL;
-		mutex_unlock(&dev->domain_lock);
-		return ret;
+		goto register_err;
 	}
 
 	return 0;
+
+register_err:
+	mutex_lock(&dev->domain_lock);
+	vduse_domain_destroy(dev->domain);
+	dev->domain = NULL;
+	mutex_unlock(&dev->domain_lock);
+
+domain_err:
+	put_device(&dev->vdev->vdpa.dev);
+
+	return ret;
 }
 
 static void vdpa_dev_del(struct vdpa_mgmt_dev *mdev, struct vdpa_device *dev)
-- 
2.52.0

Re: [PATCH v11 07/12] vduse: refactor vdpa_dev_add for goto err handling
Posted by Michael S. Tsirkin 4 weeks ago
On Fri, Jan 09, 2026 at 04:24:25PM +0100, Eugenio Pérez wrote:
> Next patches introduce more error paths in this function.  Refactor it
> so they can be accomodated through gotos.

accommodated

> 
> Acked-by: Jason Wang <jasowang@redhat.com>
> Reviewed-by: Xie Yongji <xieyongji@bytedance.com>
> Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
> ---
> v6: New in v6.
> ---
>  drivers/vdpa/vdpa_user/vduse_dev.c | 22 ++++++++++++++--------
>  1 file changed, 14 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c
> index 0386434577b5..f7a45f396cf8 100644
> --- a/drivers/vdpa/vdpa_user/vduse_dev.c
> +++ b/drivers/vdpa/vdpa_user/vduse_dev.c
> @@ -2171,21 +2171,27 @@ static int vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
>  						  dev->bounce_size);
>  	mutex_unlock(&dev->domain_lock);
>  	if (!dev->domain) {
> -		put_device(&dev->vdev->vdpa.dev);
> -		return -ENOMEM;
> +		ret = -ENOMEM;
> +		goto domain_err;
>  	}
>  
>  	ret = _vdpa_register_device(&dev->vdev->vdpa, dev->vq_num);
>  	if (ret) {
> -		put_device(&dev->vdev->vdpa.dev);
> -		mutex_lock(&dev->domain_lock);
> -		vduse_domain_destroy(dev->domain);
> -		dev->domain = NULL;
> -		mutex_unlock(&dev->domain_lock);
> -		return ret;
> +		goto register_err;
>  	}
>  
>  	return 0;
> +
> +register_err:
> +	mutex_lock(&dev->domain_lock);
> +	vduse_domain_destroy(dev->domain);
> +	dev->domain = NULL;
> +	mutex_unlock(&dev->domain_lock);
> +
> +domain_err:
> +	put_device(&dev->vdev->vdpa.dev);
> +
> +	return ret;
>  }
>  
>  static void vdpa_dev_del(struct vdpa_mgmt_dev *mdev, struct vdpa_device *dev)
> -- 
> 2.52.0
Re: [PATCH v11 07/12] vduse: refactor vdpa_dev_add for goto err handling
Posted by Eugenio Perez Martin 3 weeks, 6 days ago
On Sun, Jan 11, 2026 at 12:49 AM Michael S. Tsirkin <mst@redhat.com> wrote:
>
> On Fri, Jan 09, 2026 at 04:24:25PM +0100, Eugenio Pérez wrote:
> > Next patches introduce more error paths in this function.  Refactor it
> > so they can be accomodated through gotos.
>
> accommodated
>

Fixing in the next version, thanks!

> >
> > Acked-by: Jason Wang <jasowang@redhat.com>
> > Reviewed-by: Xie Yongji <xieyongji@bytedance.com>
> > Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
> > ---
> > v6: New in v6.
> > ---
> >  drivers/vdpa/vdpa_user/vduse_dev.c | 22 ++++++++++++++--------
> >  1 file changed, 14 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c
> > index 0386434577b5..f7a45f396cf8 100644
> > --- a/drivers/vdpa/vdpa_user/vduse_dev.c
> > +++ b/drivers/vdpa/vdpa_user/vduse_dev.c
> > @@ -2171,21 +2171,27 @@ static int vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name,
> >                                                 dev->bounce_size);
> >       mutex_unlock(&dev->domain_lock);
> >       if (!dev->domain) {
> > -             put_device(&dev->vdev->vdpa.dev);
> > -             return -ENOMEM;
> > +             ret = -ENOMEM;
> > +             goto domain_err;
> >       }
> >
> >       ret = _vdpa_register_device(&dev->vdev->vdpa, dev->vq_num);
> >       if (ret) {
> > -             put_device(&dev->vdev->vdpa.dev);
> > -             mutex_lock(&dev->domain_lock);
> > -             vduse_domain_destroy(dev->domain);
> > -             dev->domain = NULL;
> > -             mutex_unlock(&dev->domain_lock);
> > -             return ret;
> > +             goto register_err;
> >       }
> >
> >       return 0;
> > +
> > +register_err:
> > +     mutex_lock(&dev->domain_lock);
> > +     vduse_domain_destroy(dev->domain);
> > +     dev->domain = NULL;
> > +     mutex_unlock(&dev->domain_lock);
> > +
> > +domain_err:
> > +     put_device(&dev->vdev->vdpa.dev);
> > +
> > +     return ret;
> >  }
> >
> >  static void vdpa_dev_del(struct vdpa_mgmt_dev *mdev, struct vdpa_device *dev)
> > --
> > 2.52.0
>