diff options
Diffstat (limited to 'fs/notify/fsnotify.c')
-rw-r--r-- | fs/notify/fsnotify.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c index 79b47cbb5cd8..ccb14d3fc0de 100644 --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c | |||
@@ -26,6 +26,7 @@ | |||
26 | 26 | ||
27 | #include <linux/fsnotify_backend.h> | 27 | #include <linux/fsnotify_backend.h> |
28 | #include "fsnotify.h" | 28 | #include "fsnotify.h" |
29 | #include "../mount.h" | ||
29 | 30 | ||
30 | /* | 31 | /* |
31 | * Clear all of the marks on an inode when it is being evicted from core | 32 | * Clear all of the marks on an inode when it is being evicted from core |
@@ -205,13 +206,13 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, | |||
205 | struct fsnotify_mark *inode_mark = NULL, *vfsmount_mark = NULL; | 206 | struct fsnotify_mark *inode_mark = NULL, *vfsmount_mark = NULL; |
206 | struct fsnotify_group *inode_group, *vfsmount_group; | 207 | struct fsnotify_group *inode_group, *vfsmount_group; |
207 | struct fsnotify_event *event = NULL; | 208 | struct fsnotify_event *event = NULL; |
208 | struct vfsmount *mnt; | 209 | struct mount *mnt; |
209 | int idx, ret = 0; | 210 | int idx, ret = 0; |
210 | /* global tests shouldn't care about events on child only the specific event */ | 211 | /* global tests shouldn't care about events on child only the specific event */ |
211 | __u32 test_mask = (mask & ~FS_EVENT_ON_CHILD); | 212 | __u32 test_mask = (mask & ~FS_EVENT_ON_CHILD); |
212 | 213 | ||
213 | if (data_is == FSNOTIFY_EVENT_PATH) | 214 | if (data_is == FSNOTIFY_EVENT_PATH) |
214 | mnt = ((struct path *)data)->mnt; | 215 | mnt = real_mount(((struct path *)data)->mnt); |
215 | else | 216 | else |
216 | mnt = NULL; | 217 | mnt = NULL; |
217 | 218 | ||
@@ -262,11 +263,11 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, | |||
262 | /* we didn't use the vfsmount_mark */ | 263 | /* we didn't use the vfsmount_mark */ |
263 | vfsmount_group = NULL; | 264 | vfsmount_group = NULL; |
264 | } else if (vfsmount_group > inode_group) { | 265 | } else if (vfsmount_group > inode_group) { |
265 | ret = send_to_group(to_tell, mnt, NULL, vfsmount_mark, mask, data, | 266 | ret = send_to_group(to_tell, &mnt->mnt, NULL, vfsmount_mark, mask, data, |
266 | data_is, cookie, file_name, &event); | 267 | data_is, cookie, file_name, &event); |
267 | inode_group = NULL; | 268 | inode_group = NULL; |
268 | } else { | 269 | } else { |
269 | ret = send_to_group(to_tell, mnt, inode_mark, vfsmount_mark, | 270 | ret = send_to_group(to_tell, &mnt->mnt, inode_mark, vfsmount_mark, |
270 | mask, data, data_is, cookie, file_name, | 271 | mask, data, data_is, cookie, file_name, |
271 | &event); | 272 | &event); |
272 | } | 273 | } |