diff mbox

[media] staging: lirc: clean error handling in probe()

Message ID 20130626075358.GC1895@elgon.mountain (mailing list archive)
State New, archived
Headers show

Commit Message

Dan Carpenter June 26, 2013, 7:53 a.m. UTC
I have reorganized the error handling into a simpler and more canonical
format.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Andy Shevchenko June 26, 2013, 8 a.m. UTC | #1
On Wed, 2013-06-26 at 10:53 +0300, Dan Carpenter wrote: 
> I have reorganized the error handling into a simpler and more canonical
> format.

Since you reorganize error handling, might be worth to convert it to
devm_*? 

If you want I could do the patch.
Dan Carpenter June 26, 2013, 10:37 a.m. UTC | #2
On Wed, Jun 26, 2013 at 11:00:40AM +0300, Andy Shevchenko wrote:
> On Wed, 2013-06-26 at 10:53 +0300, Dan Carpenter wrote: 
> > I have reorganized the error handling into a simpler and more canonical
> > format.
> 
> Since you reorganize error handling, might be worth to convert it to
> devm_*? 
> 
> If you want I could do the patch.

Yeah.  Using devm_kzalloc() would make it a lot simpler.  That would
be great if you could re-write it that way.  Thanks!

Please drop my patch in that case.

regards,
dan carpenter

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/staging/media/lirc/lirc_igorplugusb.c b/drivers/staging/media/lirc/lirc_igorplugusb.c
index 2faa391..4cf3933 100644
--- a/drivers/staging/media/lirc/lirc_igorplugusb.c
+++ b/drivers/staging/media/lirc/lirc_igorplugusb.c
@@ -390,7 +390,6 @@  static int igorplugusb_remote_probe(struct usb_interface *intf,
 	int devnum, pipe, maxp;
 	int minor = 0;
 	char buf[63], name[128] = "";
-	int mem_failure = 0;
 	int ret;
 
 	dprintk(DRIVER_NAME ": usb probe called.\n");
@@ -416,24 +415,17 @@  static int igorplugusb_remote_probe(struct usb_interface *intf,
 	dprintk(DRIVER_NAME "[%d]: bytes_in_key=%zu maxp=%d\n",
 		devnum, CODE_LENGTH, maxp);
 
-	mem_failure = 0;
 	ir = kzalloc(sizeof(struct igorplug), GFP_KERNEL);
-	if (!ir) {
-		mem_failure = 1;
-		goto mem_failure_switch;
-	}
+	if (!ir)
+		return -ENOMEM;
 	driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
-	if (!driver) {
-		mem_failure = 2;
-		goto mem_failure_switch;
-	}
+	if (!driver)
+		goto err_free_ir;
 
 	ir->buf_in = usb_alloc_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN,
 					GFP_ATOMIC, &ir->dma_in);
-	if (!ir->buf_in) {
-		mem_failure = 3;
-		goto mem_failure_switch;
-	}
+	if (!ir->buf_in)
+		goto err_free_driver;
 
 	strcpy(driver->name, DRIVER_NAME " ");
 	driver->minor = -1;
@@ -451,23 +443,7 @@  static int igorplugusb_remote_probe(struct usb_interface *intf,
 
 	minor = lirc_register_driver(driver);
 	if (minor < 0)
-		mem_failure = 9;
-
-mem_failure_switch:
-
-	switch (mem_failure) {
-	case 9:
-		usb_free_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN,
-			ir->buf_in, ir->dma_in);
-	case 3:
-		kfree(driver);
-	case 2:
-		kfree(ir);
-	case 1:
-		printk(DRIVER_NAME "[%d]: out of memory (code=%d)\n",
-			devnum, mem_failure);
-		return -ENOMEM;
-	}
+		goto err_free_usb;
 
 	driver->minor = minor;
 	ir->d = driver;
@@ -500,6 +476,16 @@  mem_failure_switch:
 
 	usb_set_intfdata(intf, ir);
 	return 0;
+
+err_free_usb:
+	usb_free_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN, ir->buf_in,
+			  ir->dma_in);
+err_free_driver:
+	kfree(driver);
+err_free_ir:
+	kfree(ir);
+
+	return -ENOMEM;
 }