aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/mount.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/sysfs/mount.c')
-rw-r--r--fs/sysfs/mount.c10
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
155int __init sysfs_init(void) 155int __init sysfs_init(void)