i2c: free idr when sanity checks in i2c_register_adapter() fail
authorWolfram Sang <wsa-dev@sang-engineering.com>
Sat, 9 Jul 2016 04:34:58 +0000 (13:34 +0900)
committerWolfram Sang <wsa@the-dreams.de>
Thu, 14 Jul 2016 13:06:44 +0000 (22:06 +0900)
On error, we should give idr back to the pool in any case.

Signed-off-by: Wolfram Sang <wsa-dev@sang-engineering.com>
Reviewed-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
drivers/i2c/i2c-core.c

index 952d2f0c02c5984681fd03e734a3f73d75a16203..9f53751e49a779bdbd0a24b61f61a6b021a77128 100644 (file)
@@ -1554,7 +1554,7 @@ static int __process_new_adapter(struct device_driver *d, void *data)
 
 static int i2c_register_adapter(struct i2c_adapter *adap)
 {
-       int res = 0;
+       int res = -EINVAL;
 
        /* Can't register until after driver model init */
        if (WARN_ON(!is_registered)) {
@@ -1566,12 +1566,12 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
        if (unlikely(adap->name[0] == '\0')) {
                pr_err("i2c-core: Attempt to register an adapter with "
                       "no name!\n");
-               return -EINVAL;
+               goto out_list;
        }
        if (unlikely(!adap->algo)) {
                pr_err("i2c-core: Attempt to register adapter '%s' with "
                       "no algo!\n", adap->name);
-               return -EINVAL;
+               goto out_list;
        }
 
        if (!adap->lock_bus) {