hi Greg, 2010/6/15 Greg KH <greg@xxxxxxxxx>: > On Tue, Jun 08, 2010 at 03:29:23PM +0800, Axel Lin wrote: >> In current implemtation, the "data" is not kfreed in qcprobe error path. >> This patch moves the memory allocation a little bit latter and only >> allocate memory when no error is detected in previous checking. > > Yeah, but it's now pretty messy. > >> --- a/drivers/usb/serial/qcserial.c >> +++ b/drivers/usb/serial/qcserial.c >> @@ -109,13 +109,6 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) >> ifnum = intf->desc.bInterfaceNumber; >> dbg("This Interface = %d", ifnum); >> >> - data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), >> - GFP_KERNEL); >> - if (!data) >> - return -ENOMEM; >> - >> - spin_lock_init(&data->susp_lock); >> - > > Moving this to the end is fine. > >> @@ -140,7 +135,7 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) >> retval); >> retval = -ENODEV; >> } >> - return retval; >> + goto out; > > But this doesn't need to be changed, right? > Or this. > >> } >> break; >> >> @@ -156,17 +151,26 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id) >> retval); >> retval = -ENODEV; >> } >> - return retval; >> + goto out; > > Or this? > >> } >> break; >> >> default: >> dev_err(&serial->dev->dev, >> "unknown number of interfaces: %d\n", nintf); >> - return -ENODEV; > > Hm. maybe. > >> } >> >> - return retval; >> +out: >> + if (retval) >> + return retval; >> + >> + data = serial->private = kzalloc(sizeof(struct usb_wwan_intf_private), >> + GFP_KERNEL); >> + if (!data) >> + return -ENOMEM; >> + >> + spin_lock_init(&data->susp_lock); >> + return 0; > > I guess it's ok, I just don't like doing data initialization on the > "out" path, it's messy. > > Care to neaten this up a bit more and resend it? Perhaps just free the > memory on the error path instead of moving it later on? I will send a revised patch that just free the memory on the error path. Thanks for the review. Axel > > thanks, > > greg k-h > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html