aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/core/file.c')
-rw-r--r--drivers/usb/core/file.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/usb/core/file.c b/drivers/usb/core/file.c
index 65de6f73b672..558890ada0e5 100644
--- a/drivers/usb/core/file.c
+++ b/drivers/usb/core/file.c
@@ -193,9 +193,10 @@ int usb_register_dev(struct usb_interface *intf,
193 intf->minor = minor; 193 intf->minor = minor;
194 break; 194 break;
195 } 195 }
196 up_write(&minor_rwsem); 196 if (intf->minor < 0) {
197 if (intf->minor < 0) 197 up_write(&minor_rwsem);
198 return -EXFULL; 198 return -EXFULL;
199 }
199 200
200 /* create a usb class device for this usb interface */ 201 /* create a usb class device for this usb interface */
201 snprintf(name, sizeof(name), class_driver->name, minor - minor_base); 202 snprintf(name, sizeof(name), class_driver->name, minor - minor_base);
@@ -203,12 +204,11 @@ int usb_register_dev(struct usb_interface *intf,
203 MKDEV(USB_MAJOR, minor), class_driver, 204 MKDEV(USB_MAJOR, minor), class_driver,
204 "%s", kbasename(name)); 205 "%s", kbasename(name));
205 if (IS_ERR(intf->usb_dev)) { 206 if (IS_ERR(intf->usb_dev)) {
206 down_write(&minor_rwsem);
207 usb_minors[minor] = NULL; 207 usb_minors[minor] = NULL;
208 intf->minor = -1; 208 intf->minor = -1;
209 up_write(&minor_rwsem);
210 retval = PTR_ERR(intf->usb_dev); 209 retval = PTR_ERR(intf->usb_dev);
211 } 210 }
211 up_write(&minor_rwsem);
212 return retval; 212 return retval;
213} 213}
214EXPORT_SYMBOL_GPL(usb_register_dev); 214EXPORT_SYMBOL_GPL(usb_register_dev);
@@ -234,12 +234,12 @@ void usb_deregister_dev(struct usb_interface *intf,
234 return; 234 return;
235 235
236 dev_dbg(&intf->dev, "removing %d minor\n", intf->minor); 236 dev_dbg(&intf->dev, "removing %d minor\n", intf->minor);
237 device_destroy(usb_class->class, MKDEV(USB_MAJOR, intf->minor));
237 238
238 down_write(&minor_rwsem); 239 down_write(&minor_rwsem);
239 usb_minors[intf->minor] = NULL; 240 usb_minors[intf->minor] = NULL;
240 up_write(&minor_rwsem); 241 up_write(&minor_rwsem);
241 242
242 device_destroy(usb_class->class, MKDEV(USB_MAJOR, intf->minor));
243 intf->usb_dev = NULL; 243 intf->usb_dev = NULL;
244 intf->minor = -1; 244 intf->minor = -1;
245 destroy_usb_class(); 245 destroy_usb_class();