We have reorganized the error handling into a simpler and more canonical format. Additionally we removed extra empty lines, switched to devm_kzalloc(), and substitute 'minor' by 'ret' in the igorplugusb_remote_probe() function.
Showing the changes to drivers/staging/media/lirc/lirc_igorplugusb.c (1 of 1 file). Show all
Unified · Split
| @@ -240,10 +240,6 @@ static int unregister_from_lirc(struct igorplug *ir) · 239 unmodified lines | ||
| 240 | 240 | dprintk(DRIVER_NAME "[%d]: calling lirc_unregister_driver\n", devnum); |
| 241 | 241 | lirc_unregister_driver(d->minor); |
| 242 | 242 | |
| 243 | − kfree(d); | |
| 244 | − ir->d = NULL; | |
| 245 | − kfree(ir); | |
| 246 | − | |
| 247 | 243 | return devnum; |
| 248 | 244 | } |
| 249 | 245 | |
| @@ -377,20 +373,16 @@ static int igorplugusb_remote_poll(void *data, struct lirc_buffer *buf) · 127 unmodified lines | ||
| 377 | 373 | return -ENODATA; |
| 378 | 374 | } |
| 379 | 375 | |
| 380 | − | |
| 381 | − | |
| 382 | 376 | static int igorplugusb_remote_probe(struct usb_interface *intf, |
| 383 | 377 | const struct usb_device_id *id) |
| 384 | 378 | { |
| 385 | − struct usb_device *dev = NULL; | |
| 379 | + struct usb_device *dev; | |
| 386 | 380 | struct usb_host_interface *idesc = NULL; |
| 387 | 381 | struct usb_endpoint_descriptor *ep; |
| 388 | 382 | struct igorplug *ir = NULL; |
| 389 | 383 | struct lirc_driver *driver = NULL; |
| 390 | 384 | int devnum, pipe, maxp; |
| 391 | − int minor = 0; | |
| 392 | 385 | char buf[63], name[128] = ""; |
| 393 | − int mem_failure = 0; | |
| 394 | 386 | int ret; |
| 395 | 387 | |
| 396 | 388 | dprintk(DRIVER_NAME ": usb probe called.\n"); |
| @@ -416,24 +408,18 @@ static int igorplugusb_remote_probe(struct usb_interface *intf, · 19 unmodified lines | ||
| 416 | 408 | dprintk(DRIVER_NAME "[%d]: bytes_in_key=%zu maxp=%d\n", |
| 417 | 409 | devnum, CODE_LENGTH, maxp); |
| 418 | 410 | |
| 419 | − mem_failure = 0; | |
| 420 | − ir = kzalloc(sizeof(struct igorplug), GFP_KERNEL); | |
| 421 | − if (!ir) { | |
| 422 | − mem_failure = 1; | |
| 423 | − goto mem_failure_switch; | |
| 424 | − } | |
| 425 | − driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL); | |
| 426 | − if (!driver) { | |
| 427 | − mem_failure = 2; | |
| 428 | − goto mem_failure_switch; | |
| 429 | − } | |
| 411 | + ir = devm_kzalloc(&intf->dev, sizeof(*ir), GFP_KERNEL); | |
| 412 | + if (!ir) | |
| 413 | + return -ENOMEM; | |
| 414 | + | |
| 415 | + driver = devm_kzalloc(&intf->dev, sizeof(*driver), GFP_KERNEL); | |
| 416 | + if (!driver) | |
| 417 | + return -ENOMEM; | |
| 430 | 418 | |
| 431 | 419 | ir->buf_in = usb_alloc_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN, |
| 432 | 420 | GFP_ATOMIC, &ir->dma_in); |
| 433 | − if (!ir->buf_in) { | |
| 434 | − mem_failure = 3; | |
| 435 | − goto mem_failure_switch; | |
| 436 | − } | |
| 421 | + if (!ir->buf_in) | |
| 422 | + return -ENOMEM; | |
| 437 | 423 | |
| 438 | 424 | strcpy(driver->name, DRIVER_NAME " "); |
| 439 | 425 | driver->minor = -1; |
| @@ -449,27 +435,14 @@ static int igorplugusb_remote_probe(struct usb_interface *intf, · 9 unmodified lines | ||
| 449 | 435 | driver->dev = &intf->dev; |
| 450 | 436 | driver->owner = THIS_MODULE; |
| 451 | 437 | |
| 452 | − minor = lirc_register_driver(driver); | |
| 453 | − if (minor < 0) | |
| 454 | − mem_failure = 9; | |
| 455 | − | |
| 456 | −mem_failure_switch: | |
| 457 | − | |
| 458 | − switch (mem_failure) { | |
| 459 | − case 9: | |
| 438 | + ret = lirc_register_driver(driver); | |
| 439 | + if (ret < 0) { | |
| 460 | 440 | usb_free_coherent(dev, DEVICE_BUFLEN + DEVICE_HEADERLEN, |
| 461 | 441 | ir->buf_in, ir->dma_in); |
| 462 | − case 3: | |
| 463 | − kfree(driver); | |
| 464 | − case 2: | |
| 465 | − kfree(ir); | |
| 466 | − case 1: | |
| 467 | − printk(DRIVER_NAME "[%d]: out of memory (code=%d)\n", | |
| 468 | − devnum, mem_failure); | |
| 469 | − return -ENOMEM; | |
| 442 | + return ret; | |
| 470 | 443 | } |
| 471 | 444 | |
| 472 | − driver->minor = minor; | |
| 445 | + driver->minor = ret; | |
| 473 | 446 | ir->d = driver; |
| 474 | 447 | ir->devnum = devnum; |
| 475 | 448 | ir->usbdev = dev; |
| @@ -502,7 +475,6 @@ mem_failure_switch: · 26 unmodified lines | ||
| 502 | 475 | return 0; |
| 503 | 476 | } |
| 504 | 477 | |
| 505 | − | |
| 506 | 478 | static void igorplugusb_remote_disconnect(struct usb_interface *intf) |
| 507 | 479 | { |
| 508 | 480 | struct usb_device *usbdev = interface_to_usbdev(intf); |