Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[pandora-kernel.git] / drivers / usb / core / file.c
index 8133c99..6b1b229 100644 (file)
@@ -18,6 +18,7 @@
 #include <linux/module.h>
 #include <linux/errno.h>
 #include <linux/rwsem.h>
+#include <linux/smp_lock.h>
 #include <linux/usb.h>
 
 #include "usb.h"
@@ -33,6 +34,7 @@ static int usb_open(struct inode * inode, struct file * file)
        int err = -ENODEV;
        const struct file_operations *old_fops, *new_fops = NULL;
 
+       lock_kernel();
        down_read(&minor_rwsem);
        c = usb_minors[minor];
 
@@ -51,6 +53,7 @@ static int usb_open(struct inode * inode, struct file * file)
        fops_put(old_fops);
  done:
        up_read(&minor_rwsem);
+       unlock_kernel();
        return err;
 }
 
@@ -147,7 +150,7 @@ int usb_register_dev(struct usb_interface *intf,
        int retval = -EINVAL;
        int minor_base = class_driver->minor_base;
        int minor = 0;
-       char name[BUS_ID_SIZE];
+       char name[20];
        char *temp;
 
 #ifdef CONFIG_USB_DYNAMIC_MINORS
@@ -187,14 +190,15 @@ int usb_register_dev(struct usb_interface *intf,
        intf->minor = minor;
 
        /* create a usb class device for this usb interface */
-       snprintf(name, BUS_ID_SIZE, class_driver->name, minor - minor_base);
+       snprintf(name, sizeof(name), class_driver->name, minor - minor_base);
        temp = strrchr(name, '/');
-       if (temp && (temp[1] != 0x00))
+       if (temp && (temp[1] != '\0'))
                ++temp;
        else
                temp = name;
-       intf->usb_dev = device_create(usb_class->class, &intf->dev,
-                                     MKDEV(USB_MAJOR, minor), "%s", temp);
+       intf->usb_dev = device_create_drvdata(usb_class->class, &intf->dev,
+                                             MKDEV(USB_MAJOR, minor), NULL,
+                                             "%s", temp);
        if (IS_ERR(intf->usb_dev)) {
                down_write(&minor_rwsem);
                usb_minors[intf->minor] = NULL;
@@ -224,7 +228,7 @@ void usb_deregister_dev(struct usb_interface *intf,
                        struct usb_class_driver *class_driver)
 {
        int minor_base = class_driver->minor_base;
-       char name[BUS_ID_SIZE];
+       char name[20];
 
 #ifdef CONFIG_USB_DYNAMIC_MINORS
        minor_base = 0;
@@ -239,7 +243,7 @@ void usb_deregister_dev(struct usb_interface *intf,
        usb_minors[intf->minor] = NULL;
        up_write(&minor_rwsem);
 
-       snprintf(name, BUS_ID_SIZE, class_driver->name, intf->minor - minor_base);
+       snprintf(name, sizeof(name), class_driver->name, intf->minor - minor_base);
        device_destroy(usb_class->class, MKDEV(USB_MAJOR, intf->minor));
        intf->usb_dev = NULL;
        intf->minor = -1;