drm_sysfs_connector_add() misses to call device_unregister() when
sysfs_create_link() fails to create. Add the missed function call
to fix it.

Fixes: e1a29c6c5955 ("drm: Add ddc link in sysfs created by drm_connector")
Signed-off-by: Jing Xiangfeng <[email protected]>
---
 drivers/gpu/drm/drm_sysfs.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
index f0336c804639..39e173e10cf7 100644
--- a/drivers/gpu/drm/drm_sysfs.c
+++ b/drivers/gpu/drm/drm_sysfs.c
@@ -274,6 +274,7 @@ static const struct attribute_group *connector_dev_groups[] 
= {
 int drm_sysfs_connector_add(struct drm_connector *connector)
 {
        struct drm_device *dev = connector->dev;
+       int ret = 0;
 
        if (connector->kdev)
                return 0;
@@ -291,10 +292,16 @@ int drm_sysfs_connector_add(struct drm_connector 
*connector)
                return PTR_ERR(connector->kdev);
        }
 
-       if (connector->ddc)
-               return sysfs_create_link(&connector->kdev->kobj,
+       if (connector->ddc) {
+               ret = sysfs_create_link(&connector->kdev->kobj,
                                 &connector->ddc->dev.kobj, "ddc");
-       return 0;
+               if (ret) {
+                       device_unregister(connector->kdev);
+                       connector->kdev = NULL;
+               }
+       }
+
+       return ret;
 }
 
 void drm_sysfs_connector_remove(struct drm_connector *connector)
-- 
2.17.1

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to