1
2
3
4
5
6
7#ifndef _LINUX_INOTIFY_H
8#define _LINUX_INOTIFY_H
9
10
11#include <linux/fcntl.h>
12#include <linux/types.h>
13
14
15
16
17
18
19
20struct inotify_event {
21 __s32 wd;
22 __u32 mask;
23 __u32 cookie;
24 __u32 len;
25 char name[0];
26};
27
28
29#define IN_ACCESS 0x00000001
30#define IN_MODIFY 0x00000002
31#define IN_ATTRIB 0x00000004
32#define IN_CLOSE_WRITE 0x00000008
33#define IN_CLOSE_NOWRITE 0x00000010
34#define IN_OPEN 0x00000020
35#define IN_MOVED_FROM 0x00000040
36#define IN_MOVED_TO 0x00000080
37#define IN_CREATE 0x00000100
38#define IN_DELETE 0x00000200
39#define IN_DELETE_SELF 0x00000400
40#define IN_MOVE_SELF 0x00000800
41
42
43#define IN_UNMOUNT 0x00002000
44#define IN_Q_OVERFLOW 0x00004000
45#define IN_IGNORED 0x00008000
46
47
48#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
49#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO)
50
51
52#define IN_ONLYDIR 0x01000000
53#define IN_DONT_FOLLOW 0x02000000
54#define IN_MASK_ADD 0x20000000
55#define IN_ISDIR 0x40000000
56#define IN_ONESHOT 0x80000000
57
58
59
60
61
62
63#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \
64 IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \
65 IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF | \
66 IN_MOVE_SELF)
67
68
69#define IN_CLOEXEC O_CLOEXEC
70#define IN_NONBLOCK O_NONBLOCK
71
72#ifdef __KERNEL__
73
74#include <linux/dcache.h>
75#include <linux/fs.h>
76
77
78
79
80
81
82
83
84
85
86
87
88struct inotify_watch {
89 struct list_head h_list;
90 struct list_head i_list;
91 atomic_t count;
92 struct inotify_handle *ih;
93 struct inode *inode;
94 __s32 wd;
95 __u32 mask;
96};
97
98struct inotify_operations {
99 void (*handle_event)(struct inotify_watch *, u32, u32, u32,
100 const char *, struct inode *);
101 void (*destroy_watch)(struct inotify_watch *);
102};
103
104#ifdef CONFIG_INOTIFY
105
106
107
108extern void inotify_d_instantiate(struct dentry *, struct inode *);
109extern void inotify_d_move(struct dentry *);
110extern void inotify_inode_queue_event(struct inode *, __u32, __u32,
111 const char *, struct inode *);
112extern void inotify_dentry_parent_queue_event(struct dentry *, __u32, __u32,
113 const char *);
114extern void inotify_unmount_inodes(struct list_head *);
115extern void inotify_inode_is_dead(struct inode *);
116extern u32 inotify_get_cookie(void);
117
118
119
120extern struct inotify_handle *inotify_init(const struct inotify_operations *);
121extern void inotify_init_watch(struct inotify_watch *);
122extern void inotify_destroy(struct inotify_handle *);
123extern __s32 inotify_find_watch(struct inotify_handle *, struct inode *,
124 struct inotify_watch **);
125extern __s32 inotify_find_update_watch(struct inotify_handle *, struct inode *,
126 u32);
127extern __s32 inotify_add_watch(struct inotify_handle *, struct inotify_watch *,
128 struct inode *, __u32);
129extern __s32 inotify_clone_watch(struct inotify_watch *, struct inotify_watch *);
130extern void inotify_evict_watch(struct inotify_watch *);
131extern int inotify_rm_watch(struct inotify_handle *, struct inotify_watch *);
132extern int inotify_rm_wd(struct inotify_handle *, __u32);
133extern void inotify_remove_watch_locked(struct inotify_handle *,
134 struct inotify_watch *);
135extern void get_inotify_watch(struct inotify_watch *);
136extern void put_inotify_watch(struct inotify_watch *);
137
138#else
139
140static inline void inotify_d_instantiate(struct dentry *dentry,
141 struct inode *inode)
142{
143}
144
145static inline void inotify_d_move(struct dentry *dentry)
146{
147}
148
149static inline void inotify_inode_queue_event(struct inode *inode,
150 __u32 mask, __u32 cookie,
151 const char *filename,
152 struct inode *n_inode)
153{
154}
155
156static inline void inotify_dentry_parent_queue_event(struct dentry *dentry,
157 __u32 mask, __u32 cookie,
158 const char *filename)
159{
160}
161
162static inline void inotify_unmount_inodes(struct list_head *list)
163{
164}
165
166static inline void inotify_inode_is_dead(struct inode *inode)
167{
168}
169
170static inline u32 inotify_get_cookie(void)
171{
172 return 0;
173}
174
175static inline struct inotify_handle *inotify_init(const struct inotify_operations *ops)
176{
177 return ERR_PTR(-EOPNOTSUPP);
178}
179
180static inline void inotify_init_watch(struct inotify_watch *watch)
181{
182}
183
184static inline void inotify_destroy(struct inotify_handle *ih)
185{
186}
187
188static inline __s32 inotify_find_watch(struct inotify_handle *ih, struct inode *inode,
189 struct inotify_watch **watchp)
190{
191 return -EOPNOTSUPP;
192}
193
194static inline __s32 inotify_find_update_watch(struct inotify_handle *ih,
195 struct inode *inode, u32 mask)
196{
197 return -EOPNOTSUPP;
198}
199
200static inline __s32 inotify_add_watch(struct inotify_handle *ih,
201 struct inotify_watch *watch,
202 struct inode *inode, __u32 mask)
203{
204 return -EOPNOTSUPP;
205}
206
207static inline int inotify_rm_watch(struct inotify_handle *ih,
208 struct inotify_watch *watch)
209{
210 return -EOPNOTSUPP;
211}
212
213static inline int inotify_rm_wd(struct inotify_handle *ih, __u32 wd)
214{
215 return -EOPNOTSUPP;
216}
217
218static inline void inotify_remove_watch_locked(struct inotify_handle *ih,
219 struct inotify_watch *watch)
220{
221}
222
223static inline void get_inotify_watch(struct inotify_watch *watch)
224{
225}
226
227static inline void put_inotify_watch(struct inotify_watch *watch)
228{
229}
230
231#endif
232
233#endif
234
235#endif
236