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

TOMOYO Linux Cross Reference
Linux/fs/notify/fsnotify.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ 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 */
  2 #ifndef __FS_NOTIFY_FSNOTIFY_H_
  3 #define __FS_NOTIFY_FSNOTIFY_H_
  4 
  5 #include <linux/list.h>
  6 #include <linux/fsnotify.h>
  7 #include <linux/srcu.h>
  8 #include <linux/types.h>
  9 
 10 #include "../mount.h"
 11 
 12 /*
 13  * fsnotify_connp_t is what we embed in objects which connector can be attached
 14  * to.
 15  */
 16 typedef struct fsnotify_mark_connector __rcu *fsnotify_connp_t;
 17 
 18 static inline struct inode *fsnotify_conn_inode(
 19                                 struct fsnotify_mark_connector *conn)
 20 {
 21         return conn->obj;
 22 }
 23 
 24 static inline struct mount *fsnotify_conn_mount(
 25                                 struct fsnotify_mark_connector *conn)
 26 {
 27         return real_mount(conn->obj);
 28 }
 29 
 30 static inline struct super_block *fsnotify_conn_sb(
 31                                 struct fsnotify_mark_connector *conn)
 32 {
 33         return conn->obj;
 34 }
 35 
 36 static inline struct super_block *fsnotify_object_sb(void *obj,
 37                         enum fsnotify_obj_type obj_type)
 38 {
 39         switch (obj_type) {
 40         case FSNOTIFY_OBJ_TYPE_INODE:
 41                 return ((struct inode *)obj)->i_sb;
 42         case FSNOTIFY_OBJ_TYPE_VFSMOUNT:
 43                 return ((struct vfsmount *)obj)->mnt_sb;
 44         case FSNOTIFY_OBJ_TYPE_SB:
 45                 return (struct super_block *)obj;
 46         default:
 47                 return NULL;
 48         }
 49 }
 50 
 51 static inline struct super_block *fsnotify_connector_sb(
 52                                 struct fsnotify_mark_connector *conn)
 53 {
 54         return fsnotify_object_sb(conn->obj, conn->type);
 55 }
 56 
 57 static inline fsnotify_connp_t *fsnotify_sb_marks(struct super_block *sb)
 58 {
 59         struct fsnotify_sb_info *sbinfo = fsnotify_sb_info(sb);
 60 
 61         return sbinfo ? &sbinfo->sb_marks : NULL;
 62 }
 63 
 64 /* destroy all events sitting in this groups notification queue */
 65 extern void fsnotify_flush_notify(struct fsnotify_group *group);
 66 
 67 /* protects reads of inode and vfsmount marks list */
 68 extern struct srcu_struct fsnotify_mark_srcu;
 69 
 70 /* compare two groups for sorting of marks lists */
 71 extern int fsnotify_compare_groups(struct fsnotify_group *a,
 72                                    struct fsnotify_group *b);
 73 
 74 /* Destroy all marks attached to an object via connector */
 75 extern void fsnotify_destroy_marks(fsnotify_connp_t *connp);
 76 /* run the list of all marks associated with inode and destroy them */
 77 static inline void fsnotify_clear_marks_by_inode(struct inode *inode)
 78 {
 79         fsnotify_destroy_marks(&inode->i_fsnotify_marks);
 80 }
 81 /* run the list of all marks associated with vfsmount and destroy them */
 82 static inline void fsnotify_clear_marks_by_mount(struct vfsmount *mnt)
 83 {
 84         fsnotify_destroy_marks(&real_mount(mnt)->mnt_fsnotify_marks);
 85 }
 86 /* run the list of all marks associated with sb and destroy them */
 87 static inline void fsnotify_clear_marks_by_sb(struct super_block *sb)
 88 {
 89         fsnotify_destroy_marks(fsnotify_sb_marks(sb));
 90 }
 91 
 92 /*
 93  * update the dentry->d_flags of all of inode's children to indicate if inode cares
 94  * about events that happen to its children.
 95  */
 96 extern void fsnotify_set_children_dentry_flags(struct inode *inode);
 97 
 98 extern struct kmem_cache *fsnotify_mark_connector_cachep;
 99 
100 #endif  /* __FS_NOTIFY_FSNOTIFY_H_ */
101 

~ [ 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