staging: xillybus: Improved goto flow for error handling
authorEli Billauer <eli.billauer@gmail.com>
Thu, 4 Sep 2014 14:47:46 +0000 (17:47 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Sep 2014 20:58:19 +0000 (13:58 -0700)
Suggested-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Eli Billauer <eli.billauer@gmail.com>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/xillybus/xillybus_core.c

index fc14b143d413bfd2b624dccf7ef7b1d581b10984..45dbf07ec7de58ee1a73cf29dd8eaa41f23534f2 100644 (file)
@@ -1837,7 +1837,7 @@ static int xillybus_init_chrdev(struct xilly_endpoint *endpoint,
 
        if (rc) {
                dev_warn(endpoint->dev, "Failed to obtain major/minors");
-               goto error1;
+               return rc;
        }
 
        endpoint->major = major = MAJOR(dev);
@@ -1849,7 +1849,7 @@ static int xillybus_init_chrdev(struct xilly_endpoint *endpoint,
                      endpoint->num_channels);
        if (rc) {
                dev_warn(endpoint->dev, "Failed to add cdev. Aborting.\n");
-               goto error2;
+               goto unregister_chrdev;
        }
 
        idt++;
@@ -1874,7 +1874,8 @@ static int xillybus_init_chrdev(struct xilly_endpoint *endpoint,
                        dev_warn(endpoint->dev,
                                 "Failed to create %s device. Aborting.\n",
                                 devname);
-                       goto error3;
+                       rc = -ENODEV;
+                       goto unroll_device_create;
                }
        }
 
@@ -1882,15 +1883,14 @@ static int xillybus_init_chrdev(struct xilly_endpoint *endpoint,
                 endpoint->num_channels);
        return 0; /* succeed */
 
-error3:
+unroll_device_create:
        devnum--; i--;
        for (; devnum >= 0; devnum--, i--)
                device_destroy(xillybus_class, MKDEV(major, i));
 
        cdev_del(&endpoint->cdev);
-error2:
+unregister_chrdev:
        unregister_chrdev_region(MKDEV(major, minor), endpoint->num_channels);
-error1:
 
        return rc;
 }