2009-05-22 01:01:20 +04:00
# ifndef __FS_NOTIFY_FSNOTIFY_H_
# define __FS_NOTIFY_FSNOTIFY_H_
# include <linux/list.h>
# include <linux/fsnotify.h>
# include <linux/srcu.h>
# include <linux/types.h>
2015-09-05 01:43:09 +03:00
# include "../mount.h"
2016-11-10 18:02:11 +03:00
struct fsnotify_iter_info {
struct fsnotify_mark * inode_mark ;
struct fsnotify_mark * vfsmount_mark ;
int srcu_idx ;
} ;
2009-05-22 01:01:37 +04:00
/* destroy all events sitting in this groups notification queue */
extern void fsnotify_flush_notify ( struct fsnotify_group * group ) ;
2010-07-28 18:18:38 +04:00
/* protects reads of inode and vfsmount marks list */
extern struct srcu_struct fsnotify_mark_srcu ;
2014-11-14 02:19:33 +03:00
/* compare two groups for sorting of marks lists */
extern int fsnotify_compare_groups ( struct fsnotify_group * a ,
struct fsnotify_group * b ) ;
2014-12-13 03:58:36 +03:00
/* Find mark belonging to given group in the list of marks */
2017-03-14 14:31:02 +03:00
extern struct fsnotify_mark * fsnotify_find_mark (
2017-02-01 11:21:58 +03:00
struct fsnotify_mark_connector __rcu * * connp ,
struct fsnotify_group * group ) ;
2017-03-15 11:41:15 +03:00
/* Destroy all marks connected via given connector */
2017-02-01 11:21:58 +03:00
extern void fsnotify_destroy_marks ( struct fsnotify_mark_connector __rcu * * connp ) ;
2015-09-05 01:43:09 +03:00
/* run the list of all marks associated with inode and destroy them */
static inline void fsnotify_clear_marks_by_inode ( struct inode * inode )
{
2017-02-01 11:21:58 +03:00
fsnotify_destroy_marks ( & inode - > i_fsnotify_marks ) ;
2015-09-05 01:43:09 +03:00
}
/* run the list of all marks associated with vfsmount and destroy them */
static inline void fsnotify_clear_marks_by_mount ( struct vfsmount * mnt )
{
2017-02-01 11:21:58 +03:00
fsnotify_destroy_marks ( & real_mount ( mnt ) - > mnt_fsnotify_marks ) ;
2015-09-05 01:43:09 +03:00
}
2016-05-20 03:08:59 +03:00
/* prepare for freeing all marks associated with given group */
extern void fsnotify_detach_group_marks ( struct fsnotify_group * group ) ;
2016-12-21 16:48:18 +03:00
/* Wait until all marks queued for destruction are destroyed */
extern void fsnotify_wait_marks_destroyed ( void ) ;
2016-05-20 03:08:59 +03:00
2009-05-22 01:01:29 +04:00
/*
* update the dentry - > d_flags of all of inode ' s children to indicate if inode cares
* about events that happen to its children .
*/
extern void __fsnotify_update_child_dentry_flags ( struct inode * inode ) ;
2009-05-22 01:01:37 +04:00
/* allocate and destroy and event holder to attach events to notification/access queues */
extern struct fsnotify_event_holder * fsnotify_alloc_event_holder ( void ) ;
extern void fsnotify_destroy_event_holder ( struct fsnotify_event_holder * holder ) ;
2009-05-22 01:01:20 +04:00
# endif /* __FS_NOTIFY_FSNOTIFY_H_ */