diff options
| author | Eugenio Pérez <eperezma@redhat.com> | 2026-01-19 15:33:00 +0100 |
|---|---|---|
| committer | Michael S. Tsirkin <mst@redhat.com> | 2026-01-28 15:32:17 -0500 |
| commit | 3e2ddda6f4cb9e25e2e0a24033e13e347d6ce952 (patch) | |
| tree | e64b5303032ed39def05373e6f20f5e4cf94f131 /drivers/vdpa | |
| parent | 3543b04a4ea3de78bdc420350d21c538efd6116c (diff) | |
| download | lwn-3e2ddda6f4cb9e25e2e0a24033e13e347d6ce952.tar.gz lwn-3e2ddda6f4cb9e25e2e0a24033e13e347d6ce952.zip | |
vduse: refactor vdpa_dev_add for goto err handling
Next patches introduce more error paths in this function. Refactor it
so they can be accommodated 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>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Message-Id: <20260119143306.1818855-8-eperezma@redhat.com>
Diffstat (limited to 'drivers/vdpa')
| -rw-r--r-- | drivers/vdpa/vdpa_user/vduse_dev.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c index 68290c3d9d8f..43851b0711ac 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) |
