| 1 |
|
| 2 | #ifndef _TRACEFS_INTERNAL_H
|
| 3 | #define _TRACEFS_INTERNAL_H
|
| 4 |
|
| 5 | enum {
|
| 6 | TRACEFS_EVENT_INODE = BIT(1),
|
| 7 | TRACEFS_GID_PERM_SET = BIT(2),
|
| 8 | TRACEFS_UID_PERM_SET = BIT(3),
|
| 9 | TRACEFS_INSTANCE_INODE = BIT(4),
|
| 10 | };
|
| 11 |
|
| 12 | struct tracefs_inode {
|
| 13 | struct inode vfs_inode;
|
| 14 |
|
| 15 | struct list_head list;
|
| 16 | unsigned long flags;
|
| 17 | void *private;
|
| 18 | };
|
| 19 |
|
| 20 | |
| 21 | * struct eventfs_attr - cache the mode and ownership of a eventfs entry
|
| 22 | * @mode: saved mode plus flags of what is saved
|
| 23 | * @uid: saved uid if changed
|
| 24 | * @gid: saved gid if changed
|
| 25 |
|
| 26 | struct eventfs_attr {
|
| 27 | int mode;
|
| 28 | kuid_t uid;
|
| 29 | kgid_t gid;
|
| 30 | };
|
| 31 |
|
| 32 | |
| 33 | * struct eventfs_inode - hold the properties of the eventfs directories.
|
| 34 | * @list: link list into the parent directory
|
| 35 | * @rcu: Union with @list for freeing
|
| 36 | * @children: link list into the child eventfs_inode
|
| 37 | * @entries: the array of entries representing the files in the directory
|
| 38 | * @name: the name of the directory to create
|
| 39 | * @entry_attrs: Saved mode and ownership of the @d_children
|
| 40 | * @data: The private data to pass to the callbacks
|
| 41 | * @attr: Saved mode and ownership of eventfs_inode itself
|
| 42 | * @is_freed: Flag set if the eventfs is on its way to be freed
|
| 43 | * Note if is_freed is set, then dentry is corrupted.
|
| 44 | * @is_events: Flag set for only the top level "events" directory
|
| 45 | * @nr_entries: The number of items in @entries
|
| 46 | * @ino: The saved inode number
|
| 47 |
|
| 48 | struct eventfs_inode {
|
| 49 | struct list_head list;
|
| 50 | union {
|
| 51 | struct list_head children;
|
| 52 | struct rcu_head rcu;
|
| 53 | };
|
| 54 | const struct eventfs_entry *entries;
|
| 55 | const char *name;
|
| 56 | struct eventfs_attr *entry_attrs;
|
| 57 | void *data;
|
| 58 | struct eventfs_attr attr;
|
| 59 | struct kref kref;
|
| 60 | unsigned int is_freed:1;
|
| 61 | unsigned int is_events:1;
|
| 62 | unsigned int nr_entries:30;
|
| 63 | unsigned int ino;
|
| 64 | };
|
| 65 |
|
| 66 | static inline struct tracefs_inode *get_tracefs(const struct inode *inode)
|
| 67 | {
|
| 68 | return container_of(inode, struct tracefs_inode, vfs_inode);
|
| 69 | }
|
| 70 |
|
| 71 | struct dentry *tracefs_start_creating(const char *name, struct dentry *parent);
|
| 72 | struct dentry *tracefs_end_creating(struct dentry *dentry);
|
| 73 | struct dentry *tracefs_failed_creating(struct dentry *dentry);
|
| 74 | struct inode *tracefs_get_inode(struct super_block *sb);
|
| 75 |
|
| 76 | void eventfs_remount(struct tracefs_inode *ti, bool update_uid, bool update_gid);
|
| 77 | void eventfs_d_release(struct dentry *dentry);
|
| 78 |
|
| 79 | int eventfs_remount_lock(void);
|
| 80 | void eventfs_remount_unlock(int srcu_idx);
|
| 81 |
|
| 82 | #endif
|