ChangeSet 1.1757.66.14, 2004/07/14 14:47:56-07:00, lcapitulino@prefeitura.sp.gov.br

[PATCH] USB: usb/core/file.c::usb_major_init() cleanup.

 This patch does a cleanup for usb/core/file.c::usb_major_init(), which
 is:

*) in error condition, returns the error code from register_chrdev(),
   insted returning -EBUSY;

*) adds missing audit for class_register();

*) only calls devfs_mk_dir() if the prior calls have success.


Signed-off-by: Luiz Capitulino <lcapitulino@prefeitura.sp.gov.br>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>


 drivers/usb/core/file.c |   19 +++++++++++++++----
 1 files changed, 15 insertions(+), 4 deletions(-)


diff -Nru a/drivers/usb/core/file.c b/drivers/usb/core/file.c
--- a/drivers/usb/core/file.c	2004-07-14 16:45:09 -07:00
+++ b/drivers/usb/core/file.c	2004-07-14 16:45:09 -07:00
@@ -79,14 +79,25 @@
 
 int usb_major_init(void)
 {
-	if (register_chrdev(USB_MAJOR, "usb", &usb_fops)) {
+	int error;
+
+	error = register_chrdev(USB_MAJOR, "usb", &usb_fops);
+	if (error) {
 		err("unable to get major %d for usb devices", USB_MAJOR);
-		return -EBUSY;
+		goto out;
+	}
+
+	error = class_register(&usb_class);
+	if (error) {
+		err("class_register failed for usb devices");
+		unregister_chrdev(USB_MAJOR, "usb");
+		goto out;
 	}
 
 	devfs_mk_dir("usb");
-	class_register(&usb_class);
-	return 0;
+
+out:
+	return error;
 }
 
 void usb_major_cleanup(void)
