diff options
author | Jianyu Zhan <nasa4836@gmail.com> | 2014-04-26 03:40:28 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-05-27 17:33:17 -0400 |
commit | 26fc9cd200ec839e0b3095e05ae018f27314e7aa (patch) | |
tree | 26929ec0f651c6ddaac58cd8061f4a9644440a86 | |
parent | 9f70a40128a4ddceffb6d21dd490f6ab4bc34c97 (diff) |
kernfs: move the last knowledge of sysfs out from kernfs
There is still one residue of sysfs remaining: the sb_magic
SYSFS_MAGIC. However this should be kernfs user specific,
so this patch moves it out. Kerrnfs user should specify their
magic number while mouting.
Signed-off-by: Jianyu Zhan <nasa4836@gmail.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | fs/kernfs/mount.c | 11 | ||||
-rw-r--r-- | fs/sysfs/mount.c | 4 | ||||
-rw-r--r-- | include/linux/kernfs.h | 13 | ||||
-rw-r--r-- | kernel/cgroup.c | 4 |
4 files changed, 20 insertions, 12 deletions
diff --git a/fs/kernfs/mount.c b/fs/kernfs/mount.c index f25a7c0c3cdc..d171b98a6cdd 100644 --- a/fs/kernfs/mount.c +++ b/fs/kernfs/mount.c | |||
@@ -62,7 +62,7 @@ struct kernfs_root *kernfs_root_from_sb(struct super_block *sb) | |||
62 | return NULL; | 62 | return NULL; |
63 | } | 63 | } |
64 | 64 | ||
65 | static int kernfs_fill_super(struct super_block *sb) | 65 | static int kernfs_fill_super(struct super_block *sb, unsigned long magic) |
66 | { | 66 | { |
67 | struct kernfs_super_info *info = kernfs_info(sb); | 67 | struct kernfs_super_info *info = kernfs_info(sb); |
68 | struct inode *inode; | 68 | struct inode *inode; |
@@ -71,7 +71,7 @@ static int kernfs_fill_super(struct super_block *sb) | |||
71 | info->sb = sb; | 71 | info->sb = sb; |
72 | sb->s_blocksize = PAGE_CACHE_SIZE; | 72 | sb->s_blocksize = PAGE_CACHE_SIZE; |
73 | sb->s_blocksize_bits = PAGE_CACHE_SHIFT; | 73 | sb->s_blocksize_bits = PAGE_CACHE_SHIFT; |
74 | sb->s_magic = SYSFS_MAGIC; | 74 | sb->s_magic = magic; |
75 | sb->s_op = &kernfs_sops; | 75 | sb->s_op = &kernfs_sops; |
76 | sb->s_time_gran = 1; | 76 | sb->s_time_gran = 1; |
77 | 77 | ||
@@ -132,6 +132,7 @@ const void *kernfs_super_ns(struct super_block *sb) | |||
132 | * @fs_type: file_system_type of the fs being mounted | 132 | * @fs_type: file_system_type of the fs being mounted |
133 | * @flags: mount flags specified for the mount | 133 | * @flags: mount flags specified for the mount |
134 | * @root: kernfs_root of the hierarchy being mounted | 134 | * @root: kernfs_root of the hierarchy being mounted |
135 | * @magic: file system specific magic number | ||
135 | * @new_sb_created: tell the caller if we allocated a new superblock | 136 | * @new_sb_created: tell the caller if we allocated a new superblock |
136 | * @ns: optional namespace tag of the mount | 137 | * @ns: optional namespace tag of the mount |
137 | * | 138 | * |
@@ -143,8 +144,8 @@ const void *kernfs_super_ns(struct super_block *sb) | |||
143 | * The return value can be passed to the vfs layer verbatim. | 144 | * The return value can be passed to the vfs layer verbatim. |
144 | */ | 145 | */ |
145 | struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags, | 146 | struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags, |
146 | struct kernfs_root *root, bool *new_sb_created, | 147 | struct kernfs_root *root, unsigned long magic, |
147 | const void *ns) | 148 | bool *new_sb_created, const void *ns) |
148 | { | 149 | { |
149 | struct super_block *sb; | 150 | struct super_block *sb; |
150 | struct kernfs_super_info *info; | 151 | struct kernfs_super_info *info; |
@@ -169,7 +170,7 @@ struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags, | |||
169 | if (!sb->s_root) { | 170 | if (!sb->s_root) { |
170 | struct kernfs_super_info *info = kernfs_info(sb); | 171 | struct kernfs_super_info *info = kernfs_info(sb); |
171 | 172 | ||
172 | error = kernfs_fill_super(sb); | 173 | error = kernfs_fill_super(sb, magic); |
173 | if (error) { | 174 | if (error) { |
174 | deactivate_locked_super(sb); | 175 | deactivate_locked_super(sb); |
175 | return ERR_PTR(error); | 176 | return ERR_PTR(error); |
diff --git a/fs/sysfs/mount.c b/fs/sysfs/mount.c index 8794423f7efb..8a49486bf30c 100644 --- a/fs/sysfs/mount.c +++ b/fs/sysfs/mount.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #define DEBUG | 13 | #define DEBUG |
14 | 14 | ||
15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
16 | #include <linux/magic.h> | ||
16 | #include <linux/mount.h> | 17 | #include <linux/mount.h> |
17 | #include <linux/init.h> | 18 | #include <linux/init.h> |
18 | #include <linux/user_namespace.h> | 19 | #include <linux/user_namespace.h> |
@@ -38,7 +39,8 @@ static struct dentry *sysfs_mount(struct file_system_type *fs_type, | |||
38 | } | 39 | } |
39 | 40 | ||
40 | ns = kobj_ns_grab_current(KOBJ_NS_TYPE_NET); | 41 | ns = kobj_ns_grab_current(KOBJ_NS_TYPE_NET); |
41 | root = kernfs_mount_ns(fs_type, flags, sysfs_root, &new_sb, ns); | 42 | root = kernfs_mount_ns(fs_type, flags, sysfs_root, |
43 | SYSFS_MAGIC, &new_sb, ns); | ||
42 | if (IS_ERR(root) || !new_sb) | 44 | if (IS_ERR(root) || !new_sb) |
43 | kobj_ns_drop(KOBJ_NS_TYPE_NET, ns); | 45 | kobj_ns_drop(KOBJ_NS_TYPE_NET, ns); |
44 | return root; | 46 | return root; |
diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h index c841688a78a3..17aa1cce6f8e 100644 --- a/include/linux/kernfs.h +++ b/include/linux/kernfs.h | |||
@@ -301,8 +301,8 @@ void kernfs_notify(struct kernfs_node *kn); | |||
301 | 301 | ||
302 | const void *kernfs_super_ns(struct super_block *sb); | 302 | const void *kernfs_super_ns(struct super_block *sb); |
303 | struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags, | 303 | struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags, |
304 | struct kernfs_root *root, bool *new_sb_created, | 304 | struct kernfs_root *root, unsigned long magic, |
305 | const void *ns); | 305 | bool *new_sb_created, const void *ns); |
306 | void kernfs_kill_sb(struct super_block *sb); | 306 | void kernfs_kill_sb(struct super_block *sb); |
307 | 307 | ||
308 | void kernfs_init(void); | 308 | void kernfs_init(void); |
@@ -395,7 +395,8 @@ static inline const void *kernfs_super_ns(struct super_block *sb) | |||
395 | 395 | ||
396 | static inline struct dentry * | 396 | static inline struct dentry * |
397 | kernfs_mount_ns(struct file_system_type *fs_type, int flags, | 397 | kernfs_mount_ns(struct file_system_type *fs_type, int flags, |
398 | struct kernfs_root *root, bool *new_sb_created, const void *ns) | 398 | struct kernfs_root *root, unsigned long magic, |
399 | bool *new_sb_created, const void *ns) | ||
399 | { return ERR_PTR(-ENOSYS); } | 400 | { return ERR_PTR(-ENOSYS); } |
400 | 401 | ||
401 | static inline void kernfs_kill_sb(struct super_block *sb) { } | 402 | static inline void kernfs_kill_sb(struct super_block *sb) { } |
@@ -453,9 +454,11 @@ static inline int kernfs_rename(struct kernfs_node *kn, | |||
453 | 454 | ||
454 | static inline struct dentry * | 455 | static inline struct dentry * |
455 | kernfs_mount(struct file_system_type *fs_type, int flags, | 456 | kernfs_mount(struct file_system_type *fs_type, int flags, |
456 | struct kernfs_root *root, bool *new_sb_created) | 457 | struct kernfs_root *root, unsigned long magic, |
458 | bool *new_sb_created) | ||
457 | { | 459 | { |
458 | return kernfs_mount_ns(fs_type, flags, root, new_sb_created, NULL); | 460 | return kernfs_mount_ns(fs_type, flags, root, |
461 | magic, new_sb_created, NULL); | ||
459 | } | 462 | } |
460 | 463 | ||
461 | #endif /* __LINUX_KERNFS_H */ | 464 | #endif /* __LINUX_KERNFS_H */ |
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index 3f1ca934a237..ceee0c54c6a4 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/init_task.h> | 33 | #include <linux/init_task.h> |
34 | #include <linux/kernel.h> | 34 | #include <linux/kernel.h> |
35 | #include <linux/list.h> | 35 | #include <linux/list.h> |
36 | #include <linux/magic.h> | ||
36 | #include <linux/mm.h> | 37 | #include <linux/mm.h> |
37 | #include <linux/mutex.h> | 38 | #include <linux/mutex.h> |
38 | #include <linux/mount.h> | 39 | #include <linux/mount.h> |
@@ -1604,7 +1605,8 @@ out_unlock: | |||
1604 | if (ret) | 1605 | if (ret) |
1605 | return ERR_PTR(ret); | 1606 | return ERR_PTR(ret); |
1606 | 1607 | ||
1607 | dentry = kernfs_mount(fs_type, flags, root->kf_root, &new_sb); | 1608 | dentry = kernfs_mount(fs_type, flags, root->kf_root, |
1609 | CGROUP_SUPER_MAGIC, &new_sb); | ||
1608 | if (IS_ERR(dentry) || !new_sb) | 1610 | if (IS_ERR(dentry) || !new_sb) |
1609 | cgroup_put(&root->cgrp); | 1611 | cgroup_put(&root->cgrp); |
1610 | return dentry; | 1612 | return dentry; |