~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/kernfs/kernfs-internal.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  2 /*
  3  * fs/kernfs/kernfs-internal.h - kernfs internal header file
  4  *
  5  * Copyright (c) 2001-3 Patrick Mochel
  6  * Copyright (c) 2007 SUSE Linux Products GmbH
  7  * Copyright (c) 2007, 2013 Tejun Heo <teheo@suse.de>
  8  */
  9 
 10 #ifndef __KERNFS_INTERNAL_H
 11 #define __KERNFS_INTERNAL_H
 12 
 13 #include <linux/lockdep.h>
 14 #include <linux/fs.h>
 15 #include <linux/mutex.h>
 16 #include <linux/rwsem.h>
 17 #include <linux/xattr.h>
 18 
 19 #include <linux/kernfs.h>
 20 #include <linux/fs_context.h>
 21 
 22 struct kernfs_iattrs {
 23         kuid_t                  ia_uid;
 24         kgid_t                  ia_gid;
 25         struct timespec64       ia_atime;
 26         struct timespec64       ia_mtime;
 27         struct timespec64       ia_ctime;
 28 
 29         struct simple_xattrs    xattrs;
 30         atomic_t                nr_user_xattrs;
 31         atomic_t                user_xattr_size;
 32 };
 33 
 34 struct kernfs_root {
 35         /* published fields */
 36         struct kernfs_node      *kn;
 37         unsigned int            flags;  /* KERNFS_ROOT_* flags */
 38 
 39         /* private fields, do not use outside kernfs proper */
 40         struct idr              ino_idr;
 41         u32                     last_id_lowbits;
 42         u32                     id_highbits;
 43         struct kernfs_syscall_ops *syscall_ops;
 44 
 45         /* list of kernfs_super_info of this root, protected by kernfs_rwsem */
 46         struct list_head        supers;
 47 
 48         wait_queue_head_t       deactivate_waitq;
 49         struct rw_semaphore     kernfs_rwsem;
 50         struct rw_semaphore     kernfs_iattr_rwsem;
 51         struct rw_semaphore     kernfs_supers_rwsem;
 52 
 53         struct rcu_head         rcu;
 54 };
 55 
 56 /* +1 to avoid triggering overflow warning when negating it */
 57 #define KN_DEACTIVATED_BIAS             (INT_MIN + 1)
 58 
 59 /* KERNFS_TYPE_MASK and types are defined in include/linux/kernfs.h */
 60 
 61 /**
 62  * kernfs_root - find out the kernfs_root a kernfs_node belongs to
 63  * @kn: kernfs_node of interest
 64  *
 65  * Return: the kernfs_root @kn belongs to.
 66  */
 67 static inline struct kernfs_root *kernfs_root(struct kernfs_node *kn)
 68 {
 69         /* if parent exists, it's always a dir; otherwise, @sd is a dir */
 70         if (kn->parent)
 71                 kn = kn->parent;
 72         return kn->dir.root;
 73 }
 74 
 75 /*
 76  * mount.c
 77  */
 78 struct kernfs_super_info {
 79         struct super_block      *sb;
 80 
 81         /*
 82          * The root associated with this super_block.  Each super_block is
 83          * identified by the root and ns it's associated with.
 84          */
 85         struct kernfs_root      *root;
 86 
 87         /*
 88          * Each sb is associated with one namespace tag, currently the
 89          * network namespace of the task which mounted this kernfs
 90          * instance.  If multiple tags become necessary, make the following
 91          * an array and compare kernfs_node tag against every entry.
 92          */
 93         const void              *ns;
 94 
 95         /* anchored at kernfs_root->supers, protected by kernfs_rwsem */
 96         struct list_head        node;
 97 };
 98 #define kernfs_info(SB) ((struct kernfs_super_info *)(SB->s_fs_info))
 99 
100 static inline struct kernfs_node *kernfs_dentry_node(struct dentry *dentry)
101 {
102         if (d_really_is_negative(dentry))
103                 return NULL;
104         return d_inode(dentry)->i_private;
105 }
106 
107 static inline void kernfs_set_rev(struct kernfs_node *parent,
108                                   struct dentry *dentry)
109 {
110         dentry->d_time = parent->dir.rev;
111 }
112 
113 static inline void kernfs_inc_rev(struct kernfs_node *parent)
114 {
115         parent->dir.rev++;
116 }
117 
118 static inline bool kernfs_dir_changed(struct kernfs_node *parent,
119                                       struct dentry *dentry)
120 {
121         if (parent->dir.rev != dentry->d_time)
122                 return true;
123         return false;
124 }
125 
126 extern const struct super_operations kernfs_sops;
127 extern struct kmem_cache *kernfs_node_cache, *kernfs_iattrs_cache;
128 
129 /*
130  * inode.c
131  */
132 extern const struct xattr_handler * const kernfs_xattr_handlers[];
133 void kernfs_evict_inode(struct inode *inode);
134 int kernfs_iop_permission(struct mnt_idmap *idmap,
135                           struct inode *inode, int mask);
136 int kernfs_iop_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
137                        struct iattr *iattr);
138 int kernfs_iop_getattr(struct mnt_idmap *idmap,
139                        const struct path *path, struct kstat *stat,
140                        u32 request_mask, unsigned int query_flags);
141 ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size);
142 int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr);
143 
144 /*
145  * dir.c
146  */
147 extern const struct dentry_operations kernfs_dops;
148 extern const struct file_operations kernfs_dir_fops;
149 extern const struct inode_operations kernfs_dir_iops;
150 
151 struct kernfs_node *kernfs_get_active(struct kernfs_node *kn);
152 void kernfs_put_active(struct kernfs_node *kn);
153 int kernfs_add_one(struct kernfs_node *kn);
154 struct kernfs_node *kernfs_new_node(struct kernfs_node *parent,
155                                     const char *name, umode_t mode,
156                                     kuid_t uid, kgid_t gid,
157                                     unsigned flags);
158 
159 /*
160  * file.c
161  */
162 extern const struct file_operations kernfs_file_fops;
163 
164 bool kernfs_should_drain_open_files(struct kernfs_node *kn);
165 void kernfs_drain_open_files(struct kernfs_node *kn);
166 
167 /*
168  * symlink.c
169  */
170 extern const struct inode_operations kernfs_symlink_iops;
171 
172 /*
173  * kernfs locks
174  */
175 extern struct kernfs_global_locks *kernfs_locks;
176 #endif  /* __KERNFS_INTERNAL_H */
177 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php