Re: [GIT PATCH] USB patches for 2.6.17

Andrew Morton
2006-06-23T00:28:59Z

Greg KH <gregkh@suse.de> wrote:
>
> I would think it's something new too, as I did change that very line
> that oopsed. That's why I found it odd that I couldn't reproduce it
> anymore.

device_destroy() looks wrong. It alters the class->devices list outside
its lock.

--- 25/drivers/base/core.c~device_destroy-locking-fix Thu Jun 22 17:29:07 2006
+++ 25-akpm/drivers/base/core.c Thu Jun 22 17:29:34 2006
@@ -632,14 +632,13 @@ void device_destroy(struct class *class,
list_for_each_entry(dev_tmp, &class->devices, node) {
if (dev_tmp->devt == devt) {
dev = dev_tmp;
+ list_del_init(&dev->node);
break;
}
}
up(&class->sem);

- if (dev) {
- list_del_init(&dev->node);
+ if (dev)
device_unregister(dev);
- }
}
EXPORT_SYMBOL_GPL(device_destroy);

That won't be it though.