usbfs: kill racy detection of simple_pin_fs()
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 17 Mar 2012 06:17:32 +0000 (02:17 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 21 Mar 2012 01:29:45 +0000 (21:29 -0400)
can check MS_KERNMOUNT in flags now

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/usb/core/inode.c

index 06c175a..cefa0c8 100644 (file)
@@ -50,7 +50,6 @@
 static const struct file_operations default_file_operations;
 static struct vfsmount *usbfs_mount;
 static int usbfs_mount_count;  /* = 0 */
-static int ignore_mount = 0;
 
 static struct dentry *devices_usbfs_dentry;
 static int num_buses;  /* = 0 */
@@ -256,7 +255,7 @@ static int remount(struct super_block *sb, int *flags, char *data)
         * i.e. it's a simple_pin_fs from create_special_files,
         * then ignore it.
         */
-       if (ignore_mount)
+       if (*flags & MS_KERNMOUNT)
                return 0;
 
        if (parse_options(sb, data)) {
@@ -582,11 +581,6 @@ static int create_special_files (void)
        struct dentry *parent;
        int retval;
 
-       /* the simple_pin_fs calls will call remount with no options
-        * without this flag that would overwrite the real mount options (if any)
-        */
-       ignore_mount = 1;
-
        /* create the devices special file */
        retval = simple_pin_fs(&usb_fs_type, &usbfs_mount, &usbfs_mount_count);
        if (retval) {
@@ -594,8 +588,6 @@ static int create_special_files (void)
                goto exit;
        }
 
-       ignore_mount = 0;
-
        parent = usbfs_mount->mnt_root;
        devices_usbfs_dentry = fs_create_file ("devices",
                                               listmode | S_IFREG, parent,