aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/sysfs.h
diff options
context:
space:
mode:
Diffstat (limited to 'fs/sysfs/sysfs.h')
-rw-r--r--fs/sysfs/sysfs.h20
1 files changed, 16 insertions, 4 deletions
diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h
index 030a39dbb02c..93847d54c2e3 100644
--- a/fs/sysfs/sysfs.h
+++ b/fs/sysfs/sysfs.h
@@ -58,6 +58,7 @@ struct sysfs_dirent {
58 struct sysfs_dirent *s_sibling; 58 struct sysfs_dirent *s_sibling;
59 const char *s_name; 59 const char *s_name;
60 60
61 const void *s_ns;
61 union { 62 union {
62 struct sysfs_elem_dir s_dir; 63 struct sysfs_elem_dir s_dir;
63 struct sysfs_elem_symlink s_symlink; 64 struct sysfs_elem_symlink s_symlink;
@@ -81,14 +82,22 @@ struct sysfs_dirent {
81#define SYSFS_COPY_NAME (SYSFS_DIR | SYSFS_KOBJ_LINK) 82#define SYSFS_COPY_NAME (SYSFS_DIR | SYSFS_KOBJ_LINK)
82#define SYSFS_ACTIVE_REF (SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR) 83#define SYSFS_ACTIVE_REF (SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR)
83 84
84#define SYSFS_FLAG_MASK ~SYSFS_TYPE_MASK 85#define SYSFS_NS_TYPE_MASK 0xff00
85#define SYSFS_FLAG_REMOVED 0x0200 86#define SYSFS_NS_TYPE_SHIFT 8
87
88#define SYSFS_FLAG_MASK ~(SYSFS_NS_TYPE_MASK|SYSFS_TYPE_MASK)
89#define SYSFS_FLAG_REMOVED 0x020000
86 90
87static inline unsigned int sysfs_type(struct sysfs_dirent *sd) 91static inline unsigned int sysfs_type(struct sysfs_dirent *sd)
88{ 92{
89 return sd->s_flags & SYSFS_TYPE_MASK; 93 return sd->s_flags & SYSFS_TYPE_MASK;
90} 94}
91 95
96static inline enum kobj_ns_type sysfs_ns_type(struct sysfs_dirent *sd)
97{
98 return (sd->s_flags & SYSFS_NS_TYPE_MASK) >> SYSFS_NS_TYPE_SHIFT;
99}
100
92#ifdef CONFIG_DEBUG_LOCK_ALLOC 101#ifdef CONFIG_DEBUG_LOCK_ALLOC
93#define sysfs_dirent_init_lockdep(sd) \ 102#define sysfs_dirent_init_lockdep(sd) \
94do { \ 103do { \
@@ -115,6 +124,7 @@ struct sysfs_addrm_cxt {
115 * mount.c 124 * mount.c
116 */ 125 */
117struct sysfs_super_info { 126struct sysfs_super_info {
127 const void *ns[KOBJ_NS_TYPES];
118}; 128};
119#define sysfs_info(SB) ((struct sysfs_super_info *)(SB->s_fs_info)) 129#define sysfs_info(SB) ((struct sysfs_super_info *)(SB->s_fs_info))
120extern struct sysfs_dirent sysfs_root; 130extern struct sysfs_dirent sysfs_root;
@@ -140,8 +150,10 @@ void sysfs_remove_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd);
140void sysfs_addrm_finish(struct sysfs_addrm_cxt *acxt); 150void sysfs_addrm_finish(struct sysfs_addrm_cxt *acxt);
141 151
142struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd, 152struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd,
153 const void *ns,
143 const unsigned char *name); 154 const unsigned char *name);
144struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd, 155struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
156 const void *ns,
145 const unsigned char *name); 157 const unsigned char *name);
146struct sysfs_dirent *sysfs_new_dirent(const char *name, umode_t mode, int type); 158struct sysfs_dirent *sysfs_new_dirent(const char *name, umode_t mode, int type);
147 159
@@ -152,7 +164,7 @@ int sysfs_create_subdir(struct kobject *kobj, const char *name,
152void sysfs_remove_subdir(struct sysfs_dirent *sd); 164void sysfs_remove_subdir(struct sysfs_dirent *sd);
153 165
154int sysfs_rename(struct sysfs_dirent *sd, 166int sysfs_rename(struct sysfs_dirent *sd,
155 struct sysfs_dirent *new_parent_sd, const char *new_name); 167 struct sysfs_dirent *new_parent_sd, const void *ns, const char *new_name);
156 168
157static inline struct sysfs_dirent *__sysfs_get(struct sysfs_dirent *sd) 169static inline struct sysfs_dirent *__sysfs_get(struct sysfs_dirent *sd)
158{ 170{
@@ -182,7 +194,7 @@ int sysfs_setattr(struct dentry *dentry, struct iattr *iattr);
182int sysfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat); 194int sysfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat);
183int sysfs_setxattr(struct dentry *dentry, const char *name, const void *value, 195int sysfs_setxattr(struct dentry *dentry, const char *name, const void *value,
184 size_t size, int flags); 196 size_t size, int flags);
185int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name); 197int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const void *ns, const char *name);
186int sysfs_inode_init(void); 198int sysfs_inode_init(void);
187 199
188/* 200/*