diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/fs.h | 6 | ||||
| -rw-r--r-- | include/linux/fsnotify.h | 24 |
2 files changed, 21 insertions, 9 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 85fe89c43487..50ef4d4c95bf 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -90,6 +90,9 @@ struct inodes_stat_t { | |||
| 90 | /* Expect random access pattern */ | 90 | /* Expect random access pattern */ |
| 91 | #define FMODE_RANDOM ((__force fmode_t)0x1000) | 91 | #define FMODE_RANDOM ((__force fmode_t)0x1000) |
| 92 | 92 | ||
| 93 | /* File was opened by fanotify and shouldn't generate fanotify events */ | ||
| 94 | #define FMODE_NONOTIFY ((__force fmode_t)8388608) | ||
| 95 | |||
| 93 | /* | 96 | /* |
| 94 | * The below are the various read and write types that we support. Some of | 97 | * The below are the various read and write types that we support. Some of |
| 95 | * them include behavioral modifiers that send information down to the | 98 | * them include behavioral modifiers that send information down to the |
| @@ -2508,7 +2511,8 @@ int proc_nr_files(struct ctl_table *table, int write, | |||
| 2508 | int __init get_filesystem_list(char *buf); | 2511 | int __init get_filesystem_list(char *buf); |
| 2509 | 2512 | ||
| 2510 | #define ACC_MODE(x) ("\004\002\006\006"[(x)&O_ACCMODE]) | 2513 | #define ACC_MODE(x) ("\004\002\006\006"[(x)&O_ACCMODE]) |
| 2511 | #define OPEN_FMODE(flag) ((__force fmode_t)((flag + 1) & O_ACCMODE)) | 2514 | #define OPEN_FMODE(flag) ((__force fmode_t)(((flag + 1) & O_ACCMODE) | \ |
| 2515 | (flag & FMODE_NONOTIFY))) | ||
| 2512 | 2516 | ||
| 2513 | #endif /* __KERNEL__ */ | 2517 | #endif /* __KERNEL__ */ |
| 2514 | #endif /* _LINUX_FS_H */ | 2518 | #endif /* _LINUX_FS_H */ |
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index 62e93a9dd115..5184a2b786c1 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
| @@ -165,8 +165,10 @@ static inline void fsnotify_access(struct file *file) | |||
| 165 | if (S_ISDIR(inode->i_mode)) | 165 | if (S_ISDIR(inode->i_mode)) |
| 166 | mask |= FS_IN_ISDIR; | 166 | mask |= FS_IN_ISDIR; |
| 167 | 167 | ||
| 168 | fsnotify_parent(path, NULL, mask); | 168 | if (!(file->f_mode & FMODE_NONOTIFY)) { |
| 169 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); | 169 | fsnotify_parent(path, NULL, mask); |
| 170 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); | ||
| 171 | } | ||
| 170 | } | 172 | } |
| 171 | 173 | ||
| 172 | /* | 174 | /* |
| @@ -181,8 +183,10 @@ static inline void fsnotify_modify(struct file *file) | |||
| 181 | if (S_ISDIR(inode->i_mode)) | 183 | if (S_ISDIR(inode->i_mode)) |
| 182 | mask |= FS_IN_ISDIR; | 184 | mask |= FS_IN_ISDIR; |
| 183 | 185 | ||
| 184 | fsnotify_parent(path, NULL, mask); | 186 | if (!(file->f_mode & FMODE_NONOTIFY)) { |
| 185 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); | 187 | fsnotify_parent(path, NULL, mask); |
| 188 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); | ||
| 189 | } | ||
| 186 | } | 190 | } |
| 187 | 191 | ||
| 188 | /* | 192 | /* |
| @@ -197,8 +201,10 @@ static inline void fsnotify_open(struct file *file) | |||
| 197 | if (S_ISDIR(inode->i_mode)) | 201 | if (S_ISDIR(inode->i_mode)) |
| 198 | mask |= FS_IN_ISDIR; | 202 | mask |= FS_IN_ISDIR; |
| 199 | 203 | ||
| 200 | fsnotify_parent(path, NULL, mask); | 204 | if (!(file->f_mode & FMODE_NONOTIFY)) { |
| 201 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); | 205 | fsnotify_parent(path, NULL, mask); |
| 206 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); | ||
| 207 | } | ||
| 202 | } | 208 | } |
| 203 | 209 | ||
| 204 | /* | 210 | /* |
| @@ -214,8 +220,10 @@ static inline void fsnotify_close(struct file *file) | |||
| 214 | if (S_ISDIR(inode->i_mode)) | 220 | if (S_ISDIR(inode->i_mode)) |
| 215 | mask |= FS_IN_ISDIR; | 221 | mask |= FS_IN_ISDIR; |
| 216 | 222 | ||
| 217 | fsnotify_parent(path, NULL, mask); | 223 | if (!(file->f_mode & FMODE_NONOTIFY)) { |
| 218 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); | 224 | fsnotify_parent(path, NULL, mask); |
| 225 | fsnotify(inode, mask, path, FSNOTIFY_EVENT_PATH, NULL, 0); | ||
| 226 | } | ||
| 219 | } | 227 | } |
| 220 | 228 | ||
| 221 | /* | 229 | /* |
