Hello, Any reason this was not accepted for 2.6.28.1? Is there something wrong? Thanks, Alon On 1/13/09, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > This patch (as1198) fixes a conceptual bug: Somewhere along the line > we managed to confuse USB class devices with USB char devices. As a > result, the code to send a disconnect signal to userspace would not be > built if both CONFIG_USB_DEVICE_CLASS and CONFIG_USB_DEVICEFS were > disabled. > > The usb_fs_classdev_common_remove() routine has been renamed to > usbdev_remove() and it is now called whenever any USB device is > removed, not just when a class device is unregistered. The notifier > registration and unregistration calls are no longer conditionally > compiled. And since the common removal code will always be called as > part of the char device interface, there's no need to call it again as > part of the usbfs interface; thus the invocation of > usb_fs_classdev_common_remove() has been taken out of > usbfs_remove_device(). > > Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > Reported-by: Alon Bar-Lev <alon.barlev@xxxxxxxxx> > Tested-by: Alon Bar-Lev <alon.barlev@xxxxxxxxx> > > --- > > This bugfix should also be queued for 2.6.28.stable. > > > Index: usb-2.6/drivers/usb/core/devio.c > =================================================================== > --- usb-2.6.orig/drivers/usb/core/devio.c > +++ usb-2.6/drivers/usb/core/devio.c > @@ -1700,7 +1700,7 @@ const struct file_operations usbdev_file > .release = usbdev_release, > }; > > -void usb_fs_classdev_common_remove(struct usb_device *udev) > +static void usbdev_remove(struct usb_device *udev) > { > struct dev_state *ps; > struct siginfo sinfo; > @@ -1742,10 +1742,15 @@ static void usb_classdev_remove(struct u > { > if (dev->usb_classdev) > device_unregister(dev->usb_classdev); > - usb_fs_classdev_common_remove(dev); > } > > -static int usb_classdev_notify(struct notifier_block *self, > +#else > +#define usb_classdev_add(dev) 0 > +#define usb_classdev_remove(dev) do {} while (0) > + > +#endif > + > +static int usbdev_notify(struct notifier_block *self, > unsigned long action, void *dev) > { > switch (action) { > @@ -1755,15 +1760,15 @@ static int usb_classdev_notify(struct no > break; > case USB_DEVICE_REMOVE: > usb_classdev_remove(dev); > + usbdev_remove(dev); > break; > } > return NOTIFY_OK; > } > > static struct notifier_block usbdev_nb = { > - .notifier_call = usb_classdev_notify, > + .notifier_call = usbdev_notify, > }; > -#endif > > static struct cdev usb_device_cdev; > > @@ -1798,9 +1803,8 @@ int __init usb_devio_init(void) > * to /sys/dev > */ > usb_classdev_class->dev_kobj = NULL; > - > - usb_register_notify(&usbdev_nb); > #endif > + usb_register_notify(&usbdev_nb); > out: > return retval; > > @@ -1811,8 +1815,8 @@ error_cdev: > > void usb_devio_cleanup(void) > { > -#ifdef CONFIG_USB_DEVICE_CLASS > usb_unregister_notify(&usbdev_nb); > +#ifdef CONFIG_USB_DEVICE_CLASS > class_destroy(usb_classdev_class); > #endif > cdev_del(&usb_device_cdev); > Index: usb-2.6/drivers/usb/core/inode.c > =================================================================== > --- usb-2.6.orig/drivers/usb/core/inode.c > +++ usb-2.6/drivers/usb/core/inode.c > @@ -717,7 +717,6 @@ static void usbfs_remove_device(struct u > fs_remove_file (dev->usbfs_dentry); > dev->usbfs_dentry = NULL; > } > - usb_fs_classdev_common_remove(dev); > } > > static int usbfs_notify(struct notifier_block *self, unsigned long action, void *dev) > Index: usb-2.6/drivers/usb/core/usb.h > =================================================================== > --- usb-2.6.orig/drivers/usb/core/usb.h > +++ usb-2.6/drivers/usb/core/usb.h > @@ -151,7 +151,6 @@ extern struct usb_driver usbfs_driver; > extern const struct file_operations usbfs_devices_fops; > extern const struct file_operations usbdev_file_operations; > extern void usbfs_conn_disc_event(void); > -extern void usb_fs_classdev_common_remove(struct usb_device *udev); > > extern int usb_devio_init(void); > extern void usb_devio_cleanup(void); > > -- 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