diff options
Diffstat (limited to 'include/linux/fsnotify.h')
| -rw-r--r-- | include/linux/fsnotify.h | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index e4e2204187ee..59d0df43ff9d 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
| @@ -26,18 +26,19 @@ static inline void fsnotify_d_instantiate(struct dentry *dentry, | |||
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | /* Notify this dentry's parent about a child's events. */ | 28 | /* Notify this dentry's parent about a child's events. */ |
| 29 | static inline void fsnotify_parent(struct file *file, struct dentry *dentry, __u32 mask) | 29 | static inline void fsnotify_parent(struct path *path, struct dentry *dentry, __u32 mask) |
| 30 | { | 30 | { |
| 31 | if (!dentry) | 31 | if (!dentry) |
| 32 | dentry = file->f_path.dentry; | 32 | dentry = path->dentry; |
| 33 | 33 | ||
| 34 | __fsnotify_parent(file, dentry, mask); | 34 | __fsnotify_parent(path, dentry, mask); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | /* simple call site for access decisions */ | 37 | /* simple call site for access decisions */ |
| 38 | static inline int fsnotify_perm(struct file *file, int mask) | 38 | static inline int fsnotify_perm(struct file *file, int mask) |
| 39 | { | 39 | { |
| 40 | struct inode *inode = file->f_path.dentry->d_inode; | 40 | struct path *path = &file->f_path; |
| 41 | struct inode *inode = path->dentry->d_inode; | ||
| 41 | __u32 fsnotify_mask = 0; | 42 | __u32 fsnotify_mask = 0; |
| 42 | 43 | ||
| 43 | if (file->f_mode & FMODE_NONOTIFY) | 44 | if (file->f_mode & FMODE_NONOTIFY) |
| @@ -51,7 +52,7 @@ static inline int fsnotify_perm(struct file *file, int mask) | |||
| 51 | else | 52 | else |
| 52 | BUG(); | 53 | BUG(); |
| 53 | 54 | ||
| 54 | return fsnotify(inode, fsnotify_mask, file, FSNOTIFY_EVENT_FILE, NULL, 0); | 55 | return fsnotify(inode, fsnotify_mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); |
| 55 | } | 56 | } |
| 56 | 57 | ||
| 57 | /* | 58 | /* |
| @@ -186,15 +187,16 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) | |||
| 186 | */ | 187 | */ |
| 187 | static inline void fsnotify_access(struct file *file) | 188 | static inline void fsnotify_access(struct file *file) |
| 188 | { | 189 | { |
| 189 | struct inode *inode = file->f_path.dentry->d_inode; | 190 | struct path *path = &file->f_path; |
| 191 | struct inode *inode = path->dentry->d_inode; | ||
| 190 | __u32 mask = FS_ACCESS; | 192 | __u32 mask = FS_ACCESS; |
| 191 | 193 | ||
| 192 | if (S_ISDIR(inode->i_mode)) | 194 | if (S_ISDIR(inode->i_mode)) |
| 193 | mask |= FS_IN_ISDIR; | 195 | mask |= FS_IN_ISDIR; |
| 194 | 196 | ||
| 195 | if (!(file->f_mode & FMODE_NONOTIFY)) { | 197 | if (!(file->f_mode & FMODE_NONOTIFY)) { |
| 196 | fsnotify_parent(file, NULL, mask); | 198 | fsnotify_parent(path, NULL, mask); |
| 197 | fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0); | 199 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); |
| 198 | } | 200 | } |
| 199 | } | 201 | } |
| 200 | 202 | ||
| @@ -203,15 +205,16 @@ static inline void fsnotify_access(struct file *file) | |||
| 203 | */ | 205 | */ |
| 204 | static inline void fsnotify_modify(struct file *file) | 206 | static inline void fsnotify_modify(struct file *file) |
| 205 | { | 207 | { |
| 206 | struct inode *inode = file->f_path.dentry->d_inode; | 208 | struct path *path = &file->f_path; |
| 209 | struct inode *inode = path->dentry->d_inode; | ||
| 207 | __u32 mask = FS_MODIFY; | 210 | __u32 mask = FS_MODIFY; |
| 208 | 211 | ||
| 209 | if (S_ISDIR(inode->i_mode)) | 212 | if (S_ISDIR(inode->i_mode)) |
| 210 | mask |= FS_IN_ISDIR; | 213 | mask |= FS_IN_ISDIR; |
| 211 | 214 | ||
| 212 | if (!(file->f_mode & FMODE_NONOTIFY)) { | 215 | if (!(file->f_mode & FMODE_NONOTIFY)) { |
| 213 | fsnotify_parent(file, NULL, mask); | 216 | fsnotify_parent(path, NULL, mask); |
| 214 | fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0); | 217 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); |
| 215 | } | 218 | } |
| 216 | } | 219 | } |
| 217 | 220 | ||
| @@ -220,15 +223,16 @@ static inline void fsnotify_modify(struct file *file) | |||
| 220 | */ | 223 | */ |
| 221 | static inline void fsnotify_open(struct file *file) | 224 | static inline void fsnotify_open(struct file *file) |
| 222 | { | 225 | { |
| 223 | struct inode *inode = file->f_path.dentry->d_inode; | 226 | struct path *path = &file->f_path; |
| 227 | struct inode *inode = path->dentry->d_inode; | ||
| 224 | __u32 mask = FS_OPEN; | 228 | __u32 mask = FS_OPEN; |
| 225 | 229 | ||
| 226 | if (S_ISDIR(inode->i_mode)) | 230 | if (S_ISDIR(inode->i_mode)) |
| 227 | mask |= FS_IN_ISDIR; | 231 | mask |= FS_IN_ISDIR; |
| 228 | 232 | ||
| 229 | if (!(file->f_mode & FMODE_NONOTIFY)) { | 233 | if (!(file->f_mode & FMODE_NONOTIFY)) { |
| 230 | fsnotify_parent(file, NULL, mask); | 234 | fsnotify_parent(path, NULL, mask); |
| 231 | fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0); | 235 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); |
| 232 | } | 236 | } |
| 233 | } | 237 | } |
| 234 | 238 | ||
| @@ -237,6 +241,7 @@ static inline void fsnotify_open(struct file *file) | |||
| 237 | */ | 241 | */ |
| 238 | static inline void fsnotify_close(struct file *file) | 242 | static inline void fsnotify_close(struct file *file) |
| 239 | { | 243 | { |
| 244 | struct path *path = &file->f_path; | ||
| 240 | struct inode *inode = file->f_path.dentry->d_inode; | 245 | struct inode *inode = file->f_path.dentry->d_inode; |
| 241 | fmode_t mode = file->f_mode; | 246 | fmode_t mode = file->f_mode; |
| 242 | __u32 mask = (mode & FMODE_WRITE) ? FS_CLOSE_WRITE : FS_CLOSE_NOWRITE; | 247 | __u32 mask = (mode & FMODE_WRITE) ? FS_CLOSE_WRITE : FS_CLOSE_NOWRITE; |
| @@ -245,8 +250,8 @@ static inline void fsnotify_close(struct file *file) | |||
| 245 | mask |= FS_IN_ISDIR; | 250 | mask |= FS_IN_ISDIR; |
| 246 | 251 | ||
| 247 | if (!(file->f_mode & FMODE_NONOTIFY)) { | 252 | if (!(file->f_mode & FMODE_NONOTIFY)) { |
| 248 | fsnotify_parent(file, NULL, mask); | 253 | fsnotify_parent(path, NULL, mask); |
| 249 | fsnotify(inode, mask, file, FSNOTIFY_EVENT_FILE, NULL, 0); | 254 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); |
| 250 | } | 255 | } |
| 251 | } | 256 | } |
| 252 | 257 | ||
