summaryrefslogtreecommitdiffstats
path: root/include/linux/kernfs.h
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2013-11-28 14:54:43 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-11-29 21:16:08 -0500
commit4b93dc9b1c684d0587fe44d36bbfdf45bd3bea9d (patch)
tree99a8124d0407511d6193e286b1a5b6e7d5aafdb2 /include/linux/kernfs.h
parentdf394fb56c64244b30b442e9e02de1a2d9c5a98b (diff)
sysfs, kernfs: prepare mount path for kernfs
We're in the process of separating out core sysfs functionality into kernfs which will deal with sysfs_dirents directly. This patch rearranges mount path so that the kernfs and sysfs parts are separate. * As sysfs_super_info won't be visible outside kernfs proper, kernfs_super_ns() is added to allow kernfs users to access a super_block's namespace tag. * Generic mount operation is separated out into kernfs_mount_ns(). sysfs_mount() now just performs sysfs-specific permission check, acquires namespace tag, and invokes kernfs_mount_ns(). * Generic superblock release is separated out into kernfs_kill_sb() which can be used directly as file_system_type->kill_sb(). As sysfs needs to put the namespace tag, sysfs_kill_sb() wraps kernfs_kill_sb() with ns tag put. * sysfs_dir_cachep init and sysfs_inode_init() are separated out into kernfs_init(). kernfs_init() uses only small amount of memory and trying to handle and propagate kernfs_init() failure doesn't make much sense. Use SLAB_PANIC for sysfs_dir_cachep and make sysfs_inode_init() panic on failure. After this change, kernfs_init() should be called before sysfs_init(), fs/namespace.c::mnt_init() modified accordingly. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: linux-fsdevel@vger.kernel.org Cc: Christoph Hellwig <hch@infradead.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/linux/kernfs.h')
-rw-r--r--include/linux/kernfs.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h
index fad8b986800f..75fcbe5c9d65 100644
--- a/include/linux/kernfs.h
+++ b/include/linux/kernfs.h
@@ -18,6 +18,8 @@ struct file;
18struct iattr; 18struct iattr;
19struct seq_file; 19struct seq_file;
20struct vm_area_struct; 20struct vm_area_struct;
21struct super_block;
22struct file_system_type;
21 23
22struct sysfs_dirent; 24struct sysfs_dirent;
23 25
@@ -109,6 +111,13 @@ void kernfs_enable_ns(struct sysfs_dirent *sd);
109int kernfs_setattr(struct sysfs_dirent *sd, const struct iattr *iattr); 111int kernfs_setattr(struct sysfs_dirent *sd, const struct iattr *iattr);
110void kernfs_notify(struct sysfs_dirent *sd); 112void kernfs_notify(struct sysfs_dirent *sd);
111 113
114const void *kernfs_super_ns(struct super_block *sb);
115struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags,
116 struct kernfs_root *root, const void *ns);
117void kernfs_kill_sb(struct super_block *sb);
118
119void kernfs_init(void);
120
112#else /* CONFIG_SYSFS */ 121#else /* CONFIG_SYSFS */
113 122
114static inline struct sysfs_dirent * 123static inline struct sysfs_dirent *
@@ -160,6 +169,18 @@ static inline int kernfs_setattr(struct sysfs_dirent *sd,
160 169
161static inline void kernfs_notify(struct sysfs_dirent *sd) { } 170static inline void kernfs_notify(struct sysfs_dirent *sd) { }
162 171
172static inline const void *kernfs_super_ns(struct super_block *sb)
173{ return NULL; }
174
175static inline struct dentry *
176kernfs_mount_ns(struct file_system_type *fs_type, int flags,
177 struct kernfs_root *root, const void *ns)
178{ return ERR_PTR(-ENOSYS); }
179
180static inline void kernfs_kill_sb(struct super_block *sb) { }
181
182static inline void kernfs_init(void) { }
183
163#endif /* CONFIG_SYSFS */ 184#endif /* CONFIG_SYSFS */
164 185
165static inline struct sysfs_dirent * 186static inline struct sysfs_dirent *
@@ -201,4 +222,11 @@ static inline int kernfs_remove_by_name(struct sysfs_dirent *parent,
201 return kernfs_remove_by_name_ns(parent, name, NULL); 222 return kernfs_remove_by_name_ns(parent, name, NULL);
202} 223}
203 224
225static inline struct dentry *
226kernfs_mount(struct file_system_type *fs_type, int flags,
227 struct kernfs_root *root)
228{
229 return kernfs_mount_ns(fs_type, flags, root, NULL);
230}
231
204#endif /* __LINUX_KERNFS_H */ 232#endif /* __LINUX_KERNFS_H */