mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-17 20:54:10 +00:00
fsnotify: dont put marks on temporary list when clearing marks by group
In clear_marks_by_group_flags() the mark list of a group is iterated and the marks are put on a temporary list. Since we introduced fsnotify_destroy_mark_locked() we dont need the temp list any more and are able to remove the marks while the mark list is iterated and the mark list mutex is held. Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de> Signed-off-by: Eric Paris <eparis@redhat.com>
This commit is contained in:
parent
d5a335b845
commit
64c20d2a20
2 changed files with 2 additions and 9 deletions
|
@ -299,22 +299,16 @@ void fsnotify_clear_marks_by_group_flags(struct fsnotify_group *group,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
struct fsnotify_mark *lmark, *mark;
|
struct fsnotify_mark *lmark, *mark;
|
||||||
LIST_HEAD(free_list);
|
|
||||||
|
|
||||||
mutex_lock(&group->mark_mutex);
|
mutex_lock(&group->mark_mutex);
|
||||||
list_for_each_entry_safe(mark, lmark, &group->marks_list, g_list) {
|
list_for_each_entry_safe(mark, lmark, &group->marks_list, g_list) {
|
||||||
if (mark->flags & flags) {
|
if (mark->flags & flags) {
|
||||||
list_add(&mark->free_g_list, &free_list);
|
|
||||||
list_del_init(&mark->g_list);
|
|
||||||
fsnotify_get_mark(mark);
|
fsnotify_get_mark(mark);
|
||||||
|
fsnotify_destroy_mark_locked(mark, group);
|
||||||
|
fsnotify_put_mark(mark);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mutex_unlock(&group->mark_mutex);
|
mutex_unlock(&group->mark_mutex);
|
||||||
|
|
||||||
list_for_each_entry_safe(mark, lmark, &free_list, free_g_list) {
|
|
||||||
fsnotify_destroy_mark(mark, group);
|
|
||||||
fsnotify_put_mark(mark);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -287,7 +287,6 @@ struct fsnotify_mark {
|
||||||
struct fsnotify_inode_mark i;
|
struct fsnotify_inode_mark i;
|
||||||
struct fsnotify_vfsmount_mark m;
|
struct fsnotify_vfsmount_mark m;
|
||||||
};
|
};
|
||||||
struct list_head free_g_list; /* tmp list used when freeing this mark */
|
|
||||||
__u32 ignored_mask; /* events types to ignore */
|
__u32 ignored_mask; /* events types to ignore */
|
||||||
#define FSNOTIFY_MARK_FLAG_INODE 0x01
|
#define FSNOTIFY_MARK_FLAG_INODE 0x01
|
||||||
#define FSNOTIFY_MARK_FLAG_VFSMOUNT 0x02
|
#define FSNOTIFY_MARK_FLAG_VFSMOUNT 0x02
|
||||||
|
|
Loading…
Add table
Reference in a new issue