From 5b09fc96476d7171fdffd5f5cd53da10685fc8e1 Mon Sep 17 00:00:00 2001 From: Eli Billauer Date: Thu, 4 Sep 2014 17:47:46 +0300 Subject: [PATCH] staging: xillybus: Improved goto flow for error handling Suggested-by: Dan Carpenter Signed-off-by: Eli Billauer Reviewed-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman --- drivers/staging/xillybus/xillybus_core.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/staging/xillybus/xillybus_core.c b/drivers/staging/xillybus/xillybus_core.c index fc14b143d413..45dbf07ec7de 100644 --- a/drivers/staging/xillybus/xillybus_core.c +++ b/drivers/staging/xillybus/xillybus_core.c @@ -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; } -- 2.20.1