diff options
Diffstat (limited to 'fs/sysfs/mount.c')
-rw-r--r-- | fs/sysfs/mount.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/sysfs/mount.c b/fs/sysfs/mount.c index db940a9be04..e34f0d99ea4 100644 --- a/fs/sysfs/mount.c +++ b/fs/sysfs/mount.c | |||
@@ -36,7 +36,7 @@ struct sysfs_dirent sysfs_root = { | |||
36 | .s_name = "", | 36 | .s_name = "", |
37 | .s_count = ATOMIC_INIT(1), | 37 | .s_count = ATOMIC_INIT(1), |
38 | .s_flags = SYSFS_DIR | (KOBJ_NS_TYPE_NONE << SYSFS_NS_TYPE_SHIFT), | 38 | .s_flags = SYSFS_DIR | (KOBJ_NS_TYPE_NONE << SYSFS_NS_TYPE_SHIFT), |
39 | .s_mode = S_IFDIR | S_IRUGO | S_IXUGO, | 39 | .s_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO, |
40 | .s_ino = 1, | 40 | .s_ino = 1, |
41 | }; | 41 | }; |
42 | 42 | ||
@@ -61,14 +61,14 @@ static int sysfs_fill_super(struct super_block *sb, void *data, int silent) | |||
61 | } | 61 | } |
62 | 62 | ||
63 | /* instantiate and link root dentry */ | 63 | /* instantiate and link root dentry */ |
64 | root = d_make_root(inode); | 64 | root = d_alloc_root(inode); |
65 | if (!root) { | 65 | if (!root) { |
66 | pr_debug("%s: could not get root dentry!\n",__func__); | 66 | pr_debug("%s: could not get root dentry!\n",__func__); |
67 | iput(inode); | ||
67 | return -ENOMEM; | 68 | return -ENOMEM; |
68 | } | 69 | } |
69 | root->d_fsdata = &sysfs_root; | 70 | root->d_fsdata = &sysfs_root; |
70 | sb->s_root = root; | 71 | sb->s_root = root; |
71 | sb->s_d_op = &sysfs_dentry_ops; | ||
72 | return 0; | 72 | return 0; |
73 | } | 73 | } |
74 | 74 | ||
@@ -118,12 +118,13 @@ static struct dentry *sysfs_mount(struct file_system_type *fs_type, | |||
118 | for (type = KOBJ_NS_TYPE_NONE; type < KOBJ_NS_TYPES; type++) | 118 | for (type = KOBJ_NS_TYPE_NONE; type < KOBJ_NS_TYPES; type++) |
119 | info->ns[type] = kobj_ns_grab_current(type); | 119 | info->ns[type] = kobj_ns_grab_current(type); |
120 | 120 | ||
121 | sb = sget(fs_type, sysfs_test_super, sysfs_set_super, flags, info); | 121 | sb = sget(fs_type, sysfs_test_super, sysfs_set_super, info); |
122 | if (IS_ERR(sb) || sb->s_fs_info != info) | 122 | if (IS_ERR(sb) || sb->s_fs_info != info) |
123 | free_sysfs_super_info(info); | 123 | free_sysfs_super_info(info); |
124 | if (IS_ERR(sb)) | 124 | if (IS_ERR(sb)) |
125 | return ERR_CAST(sb); | 125 | return ERR_CAST(sb); |
126 | if (!sb->s_root) { | 126 | if (!sb->s_root) { |
127 | sb->s_flags = flags; | ||
127 | error = sysfs_fill_super(sb, data, flags & MS_SILENT ? 1 : 0); | 128 | error = sysfs_fill_super(sb, data, flags & MS_SILENT ? 1 : 0); |
128 | if (error) { | 129 | if (error) { |
129 | deactivate_locked_super(sb); | 130 | deactivate_locked_super(sb); |
@@ -149,7 +150,6 @@ static struct file_system_type sysfs_fs_type = { | |||
149 | .name = "sysfs", | 150 | .name = "sysfs", |
150 | .mount = sysfs_mount, | 151 | .mount = sysfs_mount, |
151 | .kill_sb = sysfs_kill_sb, | 152 | .kill_sb = sysfs_kill_sb, |
152 | .fs_flags = FS_USERNS_MOUNT, | ||
153 | }; | 153 | }; |
154 | 154 | ||
155 | int __init sysfs_init(void) | 155 | int __init sysfs_init(void) |