Akinobu Mita wrote: > This patch fixes several return value related problems in zr364xx.
ACK. Mauro, the patch should be in my hg tree, can you pull it to the main tree please? Akinobu, thank you for the patch. Regards, Antoine -- Antoine "Royale" Jacquet http://royale.zerezo.com > > - return -ENOMEM instead of -ENODEV on out of memory > > - zr364xx checks video_register_device() error only when > its return value is -1. But video_register_device() doesn't > always return -1 on error. > > - If usb_register() returns error, module_init() wrongly returns 1: > > retval = usb_register(&zr364xx_driver) < 0; > ... > > return retval; > > And it allows the module to be loaded. Because sys_init_module() doesn't > see positive return value as error. > > Cc: Antoine Jacquet <[EMAIL PROTECTED]> > Signed-off-by: Akinobu Mita <[EMAIL PROTECTED]> > > --- > drivers/media/video/zr364xx.c | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > Index: 2.6-mm/drivers/media/video/zr364xx.c > =================================================================== > --- 2.6-mm.orig/drivers/media/video/zr364xx.c > +++ 2.6-mm/drivers/media/video/zr364xx.c > @@ -792,6 +792,7 @@ static int zr364xx_probe(struct usb_inte > { > struct usb_device *udev = interface_to_usbdev(intf); > struct zr364xx_camera *cam = NULL; > + int err; > > DBG("probing..."); > > @@ -799,12 +800,11 @@ static int zr364xx_probe(struct usb_inte > info("model %04x:%04x detected", udev->descriptor.idVendor, > udev->descriptor.idProduct); > > - if ((cam = > - kmalloc(sizeof(struct zr364xx_camera), GFP_KERNEL)) == NULL) { > + cam = kzalloc(sizeof(struct zr364xx_camera), GFP_KERNEL); > + if (cam == NULL) { > info("cam: out of memory !"); > - return -ENODEV; > + return -ENOMEM; > } > - memset(cam, 0x00, sizeof(struct zr364xx_camera)); > /* save the init method used by this camera */ > cam->method = id->driver_info; > > @@ -812,7 +812,7 @@ static int zr364xx_probe(struct usb_inte > if (cam->vdev == NULL) { > info("cam->vdev: out of memory !"); > kfree(cam); > - return -ENODEV; > + return -ENOMEM; > } > memcpy(cam->vdev, &zr364xx_template, sizeof(zr364xx_template)); > video_set_drvdata(cam->vdev, cam); > @@ -858,12 +858,13 @@ static int zr364xx_probe(struct usb_inte > cam->brightness = 64; > mutex_init(&cam->lock); > > - if (video_register_device(cam->vdev, VFL_TYPE_GRABBER, -1) == -1) { > + err = video_register_device(cam->vdev, VFL_TYPE_GRABBER, -1); > + if (err) { > info("video_register_device failed"); > video_device_release(cam->vdev); > kfree(cam->buffer); > kfree(cam); > - return -ENODEV; > + return err; > } > > usb_set_intfdata(intf, cam); > @@ -905,7 +906,7 @@ static struct usb_driver zr364xx_driver > static int __init zr364xx_init(void) > { > int retval; > - retval = usb_register(&zr364xx_driver) < 0; > + retval = usb_register(&zr364xx_driver); > if (retval) > info("usb_register failed!"); > else ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel