diff options
author | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-10-12 01:30:33 -0300 |
---|---|---|
committer | André Fabian Silva Delgado <emulatorman@parabola.nu> | 2016-10-12 01:30:33 -0300 |
commit | e914f8eb445e8f74b00303c19c2ffceaedd16a05 (patch) | |
tree | 86b60bdecb3cf6abe8546f30803b673892a40335 /fs/notify/group.c | |
parent | 1c29f4306f557ef5d9ed515ec8881f4d1735b058 (diff) |
Linux-libre 4.7.6-gnupck-4.7.6-gnu
Diffstat (limited to 'fs/notify/group.c')
-rw-r--r-- | fs/notify/group.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/fs/notify/group.c b/fs/notify/group.c index b17cb4bd8..618bc9e5c 100644 --- a/fs/notify/group.c +++ b/fs/notify/group.c @@ -41,6 +41,17 @@ static void fsnotify_final_destroy_group(struct fsnotify_group *group) } /* + * Stop queueing new events for this group. Once this function returns + * fsnotify_add_event() will not add any new events to the group's queue. + */ +void fsnotify_group_stop_queueing(struct fsnotify_group *group) +{ + mutex_lock(&group->notification_mutex); + group->shutdown = true; + mutex_unlock(&group->notification_mutex); +} + +/* * Trying to get rid of a group. Remove all marks, flush all events and release * the group reference. * Note that another thread calling fsnotify_clear_marks_by_group() may still @@ -48,6 +59,14 @@ static void fsnotify_final_destroy_group(struct fsnotify_group *group) */ void fsnotify_destroy_group(struct fsnotify_group *group) { + /* + * Stop queueing new events. The code below is careful enough to not + * require this but fanotify needs to stop queuing events even before + * fsnotify_destroy_group() is called and this makes the other callers + * of fsnotify_destroy_group() to see the same behavior. + */ + fsnotify_group_stop_queueing(group); + /* clear all inode marks for this group, attach them to destroy_list */ fsnotify_detach_group_marks(group); |