I've found minor errors in usb-skeleton.c. First, there is no valid value of interface->minor in assignment to dev->minor. Second, when calling usb_deregister_dev the interface->minor must be valid or else minor isn't deregistered.
Michal Sojka
diff -ur linux-2.6.0-test2/drivers/usb/usb-skeleton.c
edited-2.6.0-test2/drivers/usb/usb-skeleton.c
--- linux-2.6.0-test2/drivers/usb/usb-skeleton.c 2003-08-06 11:23:13.936918128
+0200
+++ edited-2.6.0-test2/drivers/usb/usb-skeleton.c 2003-08-06 11:20:34.000000000
+0200
@@ -526,7 +526,6 @@
init_MUTEX (&dev->sem);
dev->udev = udev;
dev->interface = interface;
- dev->minor = interface->minor;
/* set up the endpoint information */
/* check out the endpoints */
@@ -606,6 +605,7 @@
goto error;
}
+ dev->minor = interface->minor;
/* let the user know what node this device is now attached to */
info ("USB Skeleton device now attached to USBSkel-%d", dev->minor);
@@ -641,9 +641,6 @@
down (&dev->sem);
- /* disable open() */
- interface->minor = -1;
-
minor = dev->minor;
/* give back our minor */