Greg, Kindly apply this patch. - Rahul Ruikar On 7 October 2010 09:22, Rahul Ruikar <rahul.ruikar@xxxxxxxxx> wrote: > Fix for following cases > - Call device_unregister() only when device_register() succeeds. > - Call put_device() when device_register() fails. > - Call device_remove_file() only when device_create_file() succeeds. > > Signed-off-by: Rahul Ruikar <rahul.ruikar@xxxxxxxxx> > --- > drivers/usb/gadget/langwell_udc.c | 14 +++++++++++--- > drivers/usb/gadget/langwell_udc.h | 4 +++- > 2 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/gadget/langwell_udc.c b/drivers/usb/gadget/langwell_udc.c > index c2d2a20..56e216e 100644 > --- a/drivers/usb/gadget/langwell_udc.c > +++ b/drivers/usb/gadget/langwell_udc.c > @@ -2952,8 +2952,11 @@ static void langwell_udc_remove(struct pci_dev *pdev) > INFO(dev, "unbind\n"); > DBG(dev, "<--- %s()\n", __func__); > > - device_unregister(&dev->gadget.dev); > - device_remove_file(&pdev->dev, &dev_attr_langwell_udc); > + if (dev->reg_status) > + device_unregister(&dev->gadget.dev); > + > + if (dev->file_created) > + device_remove_file(&pdev->dev, &dev_attr_langwell_udc); > > #ifndef OTG_TRANSCEIVER > pci_set_drvdata(pdev, NULL); > @@ -3190,13 +3193,18 @@ static int langwell_udc_probe(struct pci_dev *pdev, > the_controller = dev; > > retval = device_register(&dev->gadget.dev); > - if (retval) > + if (retval) { > + put_device(&dev->gadget.dev); > goto error; > + } > + dev->reg_status = 1; > > retval = device_create_file(&pdev->dev, &dev_attr_langwell_udc); > if (retval) > goto error; > > + dev->file_created = 1; > + > VDBG(dev, "<--- %s()\n", __func__); > return 0; > > diff --git a/drivers/usb/gadget/langwell_udc.h b/drivers/usb/gadget/langwell_udc.h > index 9719934..da40671 100644 > --- a/drivers/usb/gadget/langwell_udc.h > +++ b/drivers/usb/gadget/langwell_udc.h > @@ -199,7 +199,9 @@ struct langwell_udc { > vbus_active:1, > suspended:1, > stopped:1, > - lpm:1; /* LPM capability */ > + lpm:1, /* LPM capability */ > + reg_status:1, > + file_created:1; > > /* pci state used to access those endpoints */ > struct pci_dev *pdev; > -- > 1.7.2.3 > > -- 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