On Fri, 14 May 2010 tom.leiming@xxxxxxxxx wrote: > From: Ming Lei <tom.leiming@xxxxxxxxx> > > For root-hub devices, we don't support the 'remove' action, > but deconfiguration may cause root-hub to stop work even > usb_remove_device returns failure. > > Considered it is very similar to remove a usb device by > usb_remove_device only, compared with physical disconnection processing. > > There are no races conditions found if only usb_remove_device is > called to do 'remove' action without deconfiguration, so remove > the deconfiguration to fix it. > > Signed-off-by: Ming Lei <tom.leiming@xxxxxxxxx> > --- > drivers/usb/core/sysfs.c | 7 ++----- > 1 files changed, 2 insertions(+), 5 deletions(-) > > diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c > index 06863be..5a2add3 100644 > --- a/drivers/usb/core/sysfs.c > +++ b/drivers/usb/core/sysfs.c > @@ -568,12 +568,9 @@ static ssize_t usb_remove_store(struct device *dev, > int rc = 0; > > usb_lock_device(udev); > - if (udev->state != USB_STATE_NOTATTACHED) { > - > - /* To avoid races, first unconfigure and then remove */ > - usb_set_configuration(udev, -1); > + if (udev->state != USB_STATE_NOTATTACHED) > rc = usb_remove_device(udev); > - } > + Instead of changing what the code does in the normal case, why not just prevent it from being used with root hubs? Add an initial test: /* Removing root hubs makes no sense */ if (!udev->parent) return -EINVAL; usb_lock_device(udev) ... Alan Stern -- 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