]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/linux/kernfs.h
kernfs: s/sysfs/kernfs/ in constants
[karo-tx-linux.git] / include / linux / kernfs.h
index faaf4f29e33d126b8717073a3fa0789566dbac29..e9c4e3a0396068f6d062732fa57b4303868b6f8b 100644 (file)
@@ -24,104 +24,104 @@ struct vm_area_struct;
 struct super_block;
 struct file_system_type;
 
-struct sysfs_open_dirent;
-struct sysfs_inode_attrs;
+struct kernfs_open_node;
+struct kernfs_iattrs;
 
 enum kernfs_node_type {
-       SYSFS_DIR               = 0x0001,
-       SYSFS_KOBJ_ATTR         = 0x0002,
-       SYSFS_KOBJ_LINK         = 0x0004,
+       KERNFS_DIR              = 0x0001,
+       KERNFS_FILE             = 0x0002,
+       KERNFS_LINK             = 0x0004,
 };
 
-#define SYSFS_TYPE_MASK                0x000f
-#define SYSFS_COPY_NAME                (SYSFS_DIR | SYSFS_KOBJ_LINK)
-#define SYSFS_ACTIVE_REF       SYSFS_KOBJ_ATTR
-#define SYSFS_FLAG_MASK                ~SYSFS_TYPE_MASK
+#define KERNFS_TYPE_MASK       0x000f
+#define KERNFS_COPY_NAME       (KERNFS_DIR | KERNFS_LINK)
+#define KERNFS_ACTIVE_REF      KERNFS_FILE
+#define KERNFS_FLAG_MASK       ~KERNFS_TYPE_MASK
 
 enum kernfs_node_flag {
-       SYSFS_FLAG_REMOVED      = 0x0010,
-       SYSFS_FLAG_NS           = 0x0020,
-       SYSFS_FLAG_HAS_SEQ_SHOW = 0x0040,
-       SYSFS_FLAG_HAS_MMAP     = 0x0080,
-       SYSFS_FLAG_LOCKDEP      = 0x0100,
+       KERNFS_REMOVED          = 0x0010,
+       KERNFS_NS               = 0x0020,
+       KERNFS_HAS_SEQ_SHOW     = 0x0040,
+       KERNFS_HAS_MMAP         = 0x0080,
+       KERNFS_LOCKDEP          = 0x0100,
 };
 
-/* type-specific structures for sysfs_dirent->s_* union members */
-struct sysfs_elem_dir {
+/* type-specific structures for kernfs_node union members */
+struct kernfs_elem_dir {
        unsigned long           subdirs;
-       /* children rbtree starts here and goes through sd->s_rb */
+       /* children rbtree starts here and goes through kn->rb */
        struct rb_root          children;
 
        /*
         * The kernfs hierarchy this directory belongs to.  This fits
-        * better directly in sysfs_dirent but is here to save space.
+        * better directly in kernfs_node but is here to save space.
         */
        struct kernfs_root      *root;
 };
 
-struct sysfs_elem_symlink {
-       struct sysfs_dirent     *target_sd;
+struct kernfs_elem_symlink {
+       struct kernfs_node      *target_kn;
 };
 
-struct sysfs_elem_attr {
+struct kernfs_elem_attr {
        const struct kernfs_ops *ops;
-       struct sysfs_open_dirent *open;
+       struct kernfs_open_node *open;
        loff_t                  size;
 };
 
 /*
- * sysfs_dirent - the building block of sysfs hierarchy.  Each and every
- * sysfs node is represented by single sysfs_dirent.  Most fields are
+ * kernfs_node - the building block of kernfs hierarchy.  Each and every
+ * kernfs node is represented by single kernfs_node.  Most fields are
  * private to kernfs and shouldn't be accessed directly by kernfs users.
  *
- * As long as s_count reference is held, the sysfs_dirent itself is
- * accessible.  Dereferencing s_elem or any other outer entity
- * requires s_active reference.
+ * As long as s_count reference is held, the kernfs_node itself is
+ * accessible.  Dereferencing elem or any other outer entity requires
+ * active reference.
  */
-struct sysfs_dirent {
-       atomic_t                s_count;
-       atomic_t                s_active;
+struct kernfs_node {
+       atomic_t                count;
+       atomic_t                active;
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
        struct lockdep_map      dep_map;
 #endif
        /* the following two fields are published */
-       struct sysfs_dirent     *s_parent;
-       const char              *s_name;
+       struct kernfs_node      *parent;
+       const char              *name;
 
-       struct rb_node          s_rb;
+       struct rb_node          rb;
 
        union {
                struct completion       *completion;
-               struct sysfs_dirent     *removed_list;
+               struct kernfs_node      *removed_list;
        } u;
 
-       const void              *s_ns; /* namespace tag */
-       unsigned int            s_hash; /* ns + name hash */
+       const void              *ns;    /* namespace tag */
+       unsigned int            hash;   /* ns + name hash */
        union {
-               struct sysfs_elem_dir           s_dir;
-               struct sysfs_elem_symlink       s_symlink;
-               struct sysfs_elem_attr          s_attr;
+               struct kernfs_elem_dir          dir;
+               struct kernfs_elem_symlink      symlink;
+               struct kernfs_elem_attr         attr;
        };
 
        void                    *priv;
 
-       unsigned short          s_flags;
-       umode_t                 s_mode;
-       unsigned int            s_ino;
-       struct sysfs_inode_attrs *s_iattr;
+       unsigned short          flags;
+       umode_t                 mode;
+       unsigned int            ino;
+       struct kernfs_iattrs    *iattr;
 };
 
 struct kernfs_root {
        /* published fields */
-       struct sysfs_dirent     *sd;
+       struct kernfs_node      *kn;
 
        /* private fields, do not use outside kernfs proper */
        struct ida              ino_ida;
 };
 
-struct sysfs_open_file {
+struct kernfs_open_file {
        /* published fields */
-       struct sysfs_dirent     *sd;
+       struct kernfs_node      *kn;
        struct file             *file;
 
        /* private fields, do not use outside kernfs proper */
@@ -140,7 +140,7 @@ struct kernfs_ops {
         * If seq_show() is present, seq_file path is active.  Other seq
         * operations are optional and if not implemented, the behavior is
         * equivalent to single_open().  @sf->private points to the
-        * associated sysfs_open_file.
+        * associated kernfs_open_file.
         *
         * read() is bounced through kernel buffer and a read larger than
         * PAGE_SIZE results in partial operation of PAGE_SIZE.
@@ -151,17 +151,17 @@ struct kernfs_ops {
        void *(*seq_next)(struct seq_file *sf, void *v, loff_t *ppos);
        void (*seq_stop)(struct seq_file *sf, void *v);
 
-       ssize_t (*read)(struct sysfs_open_file *of, char *buf, size_t bytes,
+       ssize_t (*read)(struct kernfs_open_file *of, char *buf, size_t bytes,
                        loff_t off);
 
        /*
         * write() is bounced through kernel buffer and a write larger than
         * PAGE_SIZE results in partial operation of PAGE_SIZE.
         */
-       ssize_t (*write)(struct sysfs_open_file *of, char *buf, size_t bytes,
+       ssize_t (*write)(struct kernfs_open_file *of, char *buf, size_t bytes,
                         loff_t off);
 
-       int (*mmap)(struct sysfs_open_file *of, struct vm_area_struct *vma);
+       int (*mmap)(struct kernfs_open_file *of, struct vm_area_struct *vma);
 
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
        struct lock_class_key   lockdep_key;
@@ -170,53 +170,64 @@ struct kernfs_ops {
 
 #ifdef CONFIG_SYSFS
 
-static inline enum kernfs_node_type sysfs_type(struct sysfs_dirent *sd)
+static inline enum kernfs_node_type kernfs_type(struct kernfs_node *kn)
 {
-       return sd->s_flags & SYSFS_TYPE_MASK;
+       return kn->flags & KERNFS_TYPE_MASK;
 }
 
 /**
  * kernfs_enable_ns - enable namespace under a directory
- * @sd: directory of interest, should be empty
+ * @kn: directory of interest, should be empty
  *
- * This is to be called right after @sd is created to enable namespace
- * under it.  All children of @sd must have non-NULL namespace tags and
+ * This is to be called right after @kn is created to enable namespace
+ * under it.  All children of @kn must have non-NULL namespace tags and
  * only the ones which match the super_block's tag will be visible.
  */
-static inline void kernfs_enable_ns(struct sysfs_dirent *sd)
+static inline void kernfs_enable_ns(struct kernfs_node *kn)
 {
-       WARN_ON_ONCE(sysfs_type(sd) != SYSFS_DIR);
-       WARN_ON_ONCE(!RB_EMPTY_ROOT(&sd->s_dir.children));
-       sd->s_flags |= SYSFS_FLAG_NS;
+       WARN_ON_ONCE(kernfs_type(kn) != KERNFS_DIR);
+       WARN_ON_ONCE(!RB_EMPTY_ROOT(&kn->dir.children));
+       kn->flags |= KERNFS_NS;
 }
 
-struct sysfs_dirent *kernfs_find_and_get_ns(struct sysfs_dirent *parent,
-                                           const char *name, const void *ns);
-void kernfs_get(struct sysfs_dirent *sd);
-void kernfs_put(struct sysfs_dirent *sd);
+/**
+ * kernfs_ns_enabled - test whether namespace is enabled
+ * @kn: the node to test
+ *
+ * Test whether namespace filtering is enabled for the children of @ns.
+ */
+static inline bool kernfs_ns_enabled(struct kernfs_node *kn)
+{
+       return kn->flags & KERNFS_NS;
+}
+
+struct kernfs_node *kernfs_find_and_get_ns(struct kernfs_node *parent,
+                                          const char *name, const void *ns);
+void kernfs_get(struct kernfs_node *kn);
+void kernfs_put(struct kernfs_node *kn);
 
 struct kernfs_root *kernfs_create_root(void *priv);
 void kernfs_destroy_root(struct kernfs_root *root);
 
-struct sysfs_dirent *kernfs_create_dir_ns(struct sysfs_dirent *parent,
-                                         const char *name, void *priv,
-                                         const void *ns);
-struct sysfs_dirent *kernfs_create_file_ns_key(struct sysfs_dirent *parent,
-                                              const char *name,
-                                              umode_t mode, loff_t size,
-                                              const struct kernfs_ops *ops,
-                                              void *priv, const void *ns,
-                                              struct lock_class_key *key);
-struct sysfs_dirent *kernfs_create_link(struct sysfs_dirent *parent,
-                                       const char *name,
-                                       struct sysfs_dirent *target);
-void kernfs_remove(struct sysfs_dirent *sd);
-int kernfs_remove_by_name_ns(struct sysfs_dirent *parent, const char *name,
+struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent,
+                                        const char *name, void *priv,
+                                        const void *ns);
+struct kernfs_node *kernfs_create_file_ns_key(struct kernfs_node *parent,
+                                             const char *name,
+                                             umode_t mode, loff_t size,
+                                             const struct kernfs_ops *ops,
+                                             void *priv, const void *ns,
+                                             struct lock_class_key *key);
+struct kernfs_node *kernfs_create_link(struct kernfs_node *parent,
+                                      const char *name,
+                                      struct kernfs_node *target);
+void kernfs_remove(struct kernfs_node *kn);
+int kernfs_remove_by_name_ns(struct kernfs_node *parent, const char *name,
                             const void *ns);
-int kernfs_rename_ns(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent,
+int kernfs_rename_ns(struct kernfs_node *kn, struct kernfs_node *new_parent,
                     const char *new_name, const void *new_ns);
-int kernfs_setattr(struct sysfs_dirent *sd, const struct iattr *iattr);
-void kernfs_notify(struct sysfs_dirent *sd);
+int kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr);
+void kernfs_notify(struct kernfs_node *kn);
 
 const void *kernfs_super_ns(struct super_block *sb);
 struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags,
@@ -227,57 +238,60 @@ void kernfs_init(void);
 
 #else  /* CONFIG_SYSFS */
 
-static inline enum kernfs_node_type sysfs_type(struct sysfs_dirent *sd)
+static inline enum kernfs_node_type kernfs_type(struct kernfs_node *kn)
 { return 0; }  /* whatever */
 
-static inline void kernfs_enable_ns(struct sysfs_dirent *sd) { }
+static inline void kernfs_enable_ns(struct kernfs_node *kn) { }
+
+static inline bool kernfs_ns_enabled(struct kernfs_node *kn)
+{ return false; }
 
-static inline struct sysfs_dirent *
-kernfs_find_and_get_ns(struct sysfs_dirent *parent, const char *name,
+static inline struct kernfs_node *
+kernfs_find_and_get_ns(struct kernfs_node *parent, const char *name,
                       const void *ns)
 { return NULL; }
 
-static inline void kernfs_get(struct sysfs_dirent *sd) { }
-static inline void kernfs_put(struct sysfs_dirent *sd) { }
+static inline void kernfs_get(struct kernfs_node *kn) { }
+static inline void kernfs_put(struct kernfs_node *kn) { }
 
 static inline struct kernfs_root *kernfs_create_root(void *priv)
 { return ERR_PTR(-ENOSYS); }
 
 static inline void kernfs_destroy_root(struct kernfs_root *root) { }
 
-static inline struct sysfs_dirent *
-kernfs_create_dir_ns(struct sysfs_dirent *parent, const char *name, void *priv,
+static inline struct kernfs_node *
+kernfs_create_dir_ns(struct kernfs_node *parent, const char *name, void *priv,
                     const void *ns)
 { return ERR_PTR(-ENOSYS); }
 
-static inline struct sysfs_dirent *
-kernfs_create_file_ns_key(struct sysfs_dirent *parent, const char *name,
+static inline struct kernfs_node *
+kernfs_create_file_ns_key(struct kernfs_node *parent, const char *name,
                          umode_t mode, loff_t size,
                          const struct kernfs_ops *ops, void *priv,
                          const void *ns, struct lock_class_key *key)
 { return ERR_PTR(-ENOSYS); }
 
-static inline struct sysfs_dirent *
-kernfs_create_link(struct sysfs_dirent *parent, const char *name,
-                  struct sysfs_dirent *target)
+static inline struct kernfs_node *
+kernfs_create_link(struct kernfs_node *parent, const char *name,
+                  struct kernfs_node *target)
 { return ERR_PTR(-ENOSYS); }
 
-static inline void kernfs_remove(struct sysfs_dirent *sd) { }
+static inline void kernfs_remove(struct kernfs_node *kn) { }
 
-static inline int kernfs_remove_by_name_ns(struct sysfs_dirent *parent,
+static inline int kernfs_remove_by_name_ns(struct kernfs_node *kn,
                                           const char *name, const void *ns)
 { return -ENOSYS; }
 
-static inline int kernfs_rename_ns(struct sysfs_dirent *sd,
-                                  struct sysfs_dirent *new_parent,
+static inline int kernfs_rename_ns(struct kernfs_node *kn,
+                                  struct kernfs_node *new_parent,
                                   const char *new_name, const void *new_ns)
 { return -ENOSYS; }
 
-static inline int kernfs_setattr(struct sysfs_dirent *sd,
+static inline int kernfs_setattr(struct kernfs_node *kn,
                                 const struct iattr *iattr)
 { return -ENOSYS; }
 
-static inline void kernfs_notify(struct sysfs_dirent *sd) { }
+static inline void kernfs_notify(struct kernfs_node *kn) { }
 
 static inline const void *kernfs_super_ns(struct super_block *sb)
 { return NULL; }
@@ -293,20 +307,20 @@ static inline void kernfs_init(void) { }
 
 #endif /* CONFIG_SYSFS */
 
-static inline struct sysfs_dirent *
-kernfs_find_and_get(struct sysfs_dirent *sd, const char *name)
+static inline struct kernfs_node *
+kernfs_find_and_get(struct kernfs_node *kn, const char *name)
 {
-       return kernfs_find_and_get_ns(sd, name, NULL);
+       return kernfs_find_and_get_ns(kn, name, NULL);
 }
 
-static inline struct sysfs_dirent *
-kernfs_create_dir(struct sysfs_dirent *parent, const char *name, void *priv)
+static inline struct kernfs_node *
+kernfs_create_dir(struct kernfs_node *parent, const char *name, void *priv)
 {
        return kernfs_create_dir_ns(parent, name, priv, NULL);
 }
 
-static inline struct sysfs_dirent *
-kernfs_create_file_ns(struct sysfs_dirent *parent, const char *name,
+static inline struct kernfs_node *
+kernfs_create_file_ns(struct kernfs_node *parent, const char *name,
                      umode_t mode, loff_t size, const struct kernfs_ops *ops,
                      void *priv, const void *ns)
 {
@@ -319,14 +333,14 @@ kernfs_create_file_ns(struct sysfs_dirent *parent, const char *name,
                                         ns, key);
 }
 
-static inline struct sysfs_dirent *
-kernfs_create_file(struct sysfs_dirent *parent, const char *name, umode_t mode,
+static inline struct kernfs_node *
+kernfs_create_file(struct kernfs_node *parent, const char *name, umode_t mode,
                   loff_t size, const struct kernfs_ops *ops, void *priv)
 {
        return kernfs_create_file_ns(parent, name, mode, size, ops, priv, NULL);
 }
 
-static inline int kernfs_remove_by_name(struct sysfs_dirent *parent,
+static inline int kernfs_remove_by_name(struct kernfs_node *parent,
                                        const char *name)
 {
        return kernfs_remove_by_name_ns(parent, name, NULL);