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 *);
137extern int pin_inotify_watch(struct inotify_watch *);
138extern void unpin_inotify_watch(struct inotify_watch *);
139
140#else
141
142static inline void inotify_d_instantiate(struct dentry *dentry,
143 struct inode *inode)
144{
145}
146
147static inline void inotify_d_move(struct dentry *dentry)
148{
149}
150
151static inline void inotify_inode_queue_event(struct inode *inode,
152 __u32 mask, __u32 cookie,
153 const char *filename,
154 struct inode *n_inode)
155{
156}
157
158static inline void inotify_dentry_parent_queue_event(struct dentry *dentry,
159 __u32 mask, __u32 cookie,
160 const char *filename)
161{
162}
163
164static inline void inotify_unmount_inodes(struct list_head *list)
165{
166}
167
168static inline void inotify_inode_is_dead(struct inode *inode)
169{
170}
171
172static inline u32 inotify_get_cookie(void)
173{
174 return 0;
175}
176
177static inline struct inotify_handle *inotify_init(const struct inotify_operations *ops)
178{
179 return ERR_PTR(-EOPNOTSUPP);
180}
181
182static inline void inotify_init_watch(struct inotify_watch *watch)
183{
184}
185
186static inline void inotify_destroy(struct inotify_handle *ih)
187{
188}
189
190static inline __s32 inotify_find_watch(struct inotify_handle *ih, struct inode *inode,
191 struct inotify_watch **watchp)
192{
193 return -EOPNOTSUPP;
194}
195
196static inline __s32 inotify_find_update_watch(struct inotify_handle *ih,
197 struct inode *inode, u32 mask)
198{
199 return -EOPNOTSUPP;
200}
201
202static inline __s32 inotify_add_watch(struct inotify_handle *ih,
203 struct inotify_watch *watch,
204 struct inode *inode, __u32 mask)
205{
206 return -EOPNOTSUPP;
207}
208
209static inline int inotify_rm_watch(struct inotify_handle *ih,
210 struct inotify_watch *watch)
211{
212 return -EOPNOTSUPP;
213}
214
215static inline int inotify_rm_wd(struct inotify_handle *ih, __u32 wd)
216{
217 return -EOPNOTSUPP;
218}
219
220static inline void inotify_remove_watch_locked(struct inotify_handle *ih,
221 struct inotify_watch *watch)
222{
223}
224
225static inline void get_inotify_watch(struct inotify_watch *watch)
226{
227}
228
229static inline void put_inotify_watch(struct inotify_watch *watch)
230{
231}
232
233extern inline int pin_inotify_watch(struct inotify_watch *watch)
234{
235 return 0;
236}
237
238extern inline void unpin_inotify_watch(struct inotify_watch *watch)
239{
240}
241
242#endif
243
244#endif
245
246#endif
247