1#ifndef __FS_NOTIFY_FSNOTIFY_H_ 2#define __FS_NOTIFY_FSNOTIFY_H_ 3 4#include <linux/list.h> 5#include <linux/fsnotify.h> 6#include <linux/srcu.h> 7#include <linux/types.h> 8 9#include "../mount.h" 10 11/* destroy all events sitting in this groups notification queue */ 12extern void fsnotify_flush_notify(struct fsnotify_group *group); 13 14/* protects reads of inode and vfsmount marks list */ 15extern struct srcu_struct fsnotify_mark_srcu; 16 17/* Calculate mask of events for a list of marks */ 18extern u32 fsnotify_recalc_mask(struct hlist_head *head); 19 20/* compare two groups for sorting of marks lists */ 21extern int fsnotify_compare_groups(struct fsnotify_group *a, 22 struct fsnotify_group *b); 23 24extern void fsnotify_set_inode_mark_mask_locked(struct fsnotify_mark *fsn_mark, 25 __u32 mask); 26/* Add mark to a proper place in mark list */ 27extern int fsnotify_add_mark_list(struct hlist_head *head, 28 struct fsnotify_mark *mark, 29 int allow_dups); 30/* add a mark to an inode */ 31extern int fsnotify_add_inode_mark(struct fsnotify_mark *mark, 32 struct fsnotify_group *group, struct inode *inode, 33 int allow_dups); 34/* add a mark to a vfsmount */ 35extern int fsnotify_add_vfsmount_mark(struct fsnotify_mark *mark, 36 struct fsnotify_group *group, struct vfsmount *mnt, 37 int allow_dups); 38 39/* vfsmount specific destruction of a mark */ 40extern void fsnotify_destroy_vfsmount_mark(struct fsnotify_mark *mark); 41/* inode specific destruction of a mark */ 42extern void fsnotify_destroy_inode_mark(struct fsnotify_mark *mark); 43/* Find mark belonging to given group in the list of marks */ 44extern struct fsnotify_mark *fsnotify_find_mark(struct hlist_head *head, 45 struct fsnotify_group *group); 46/* Destroy all marks in the given list protected by 'lock' */ 47extern void fsnotify_destroy_marks(struct hlist_head *head, spinlock_t *lock); 48/* run the list of all marks associated with inode and destroy them */ 49static inline void fsnotify_clear_marks_by_inode(struct inode *inode) 50{ 51 fsnotify_destroy_marks(&inode->i_fsnotify_marks, &inode->i_lock); 52} 53/* run the list of all marks associated with vfsmount and destroy them */ 54static inline void fsnotify_clear_marks_by_mount(struct vfsmount *mnt) 55{ 56 fsnotify_destroy_marks(&real_mount(mnt)->mnt_fsnotify_marks, 57 &mnt->mnt_root->d_lock); 58} 59/* 60 * update the dentry->d_flags of all of inode's children to indicate if inode cares 61 * about events that happen to its children. 62 */ 63extern void __fsnotify_update_child_dentry_flags(struct inode *inode); 64 65/* allocate and destroy and event holder to attach events to notification/access queues */ 66extern struct fsnotify_event_holder *fsnotify_alloc_event_holder(void); 67extern void fsnotify_destroy_event_holder(struct fsnotify_event_holder *holder); 68 69#endif /* __FS_NOTIFY_FSNOTIFY_H_ */ 70