Commit 19c2a0e1 authored by Eric Paris's avatar Eric Paris

fsnotify: rename fsnotify_groups to fsnotify_inode_groups

Simple renaming patch.  fsnotify is about to support mount point listeners
so I am renaming fsnotify_groups and fsnotify_mask to indicate these are lists
used only for groups which have watches on inodes.
Signed-off-by: default avatarEric Paris <eparis@redhat.com>
parent 0d2e2a1d
...@@ -148,10 +148,10 @@ void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, const ...@@ -148,10 +148,10 @@ void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, const
/* global tests shouldn't care about events on child only the specific event */ /* global tests shouldn't care about events on child only the specific event */
__u32 test_mask = (mask & ~FS_EVENT_ON_CHILD); __u32 test_mask = (mask & ~FS_EVENT_ON_CHILD);
if (list_empty(&fsnotify_groups)) if (list_empty(&fsnotify_inode_groups))
return; return;
if (!(test_mask & fsnotify_mask)) if (!(test_mask & fsnotify_inode_mask))
return; return;
if (!(test_mask & to_tell->i_fsnotify_mask)) if (!(test_mask & to_tell->i_fsnotify_mask))
...@@ -162,7 +162,7 @@ void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, const ...@@ -162,7 +162,7 @@ void fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is, const
* anything other than walk the list so it's crazy to pre-allocate. * anything other than walk the list so it's crazy to pre-allocate.
*/ */
idx = srcu_read_lock(&fsnotify_grp_srcu); idx = srcu_read_lock(&fsnotify_grp_srcu);
list_for_each_entry_rcu(group, &fsnotify_groups, group_list) { list_for_each_entry_rcu(group, &fsnotify_inode_groups, inode_group_list) {
if (test_mask & group->mask) { if (test_mask & group->mask) {
if (!group->ops->should_send_event(group, to_tell, mask, if (!group->ops->should_send_event(group, to_tell, mask,
data, data_is)) data, data_is))
......
...@@ -8,10 +8,10 @@ ...@@ -8,10 +8,10 @@
/* protects reads of fsnotify_groups */ /* protects reads of fsnotify_groups */
extern struct srcu_struct fsnotify_grp_srcu; extern struct srcu_struct fsnotify_grp_srcu;
/* all groups which receive fsnotify events */ /* all groups which receive inode fsnotify events */
extern struct list_head fsnotify_groups; extern struct list_head fsnotify_inode_groups;
/* all bitwise OR of all event types (FS_*) for all fsnotify_groups */ /* all bitwise OR of all event types (FS_*) for all fsnotify_inode_groups */
extern __u32 fsnotify_mask; extern __u32 fsnotify_inode_mask;
/* destroy all events sitting in this groups notification queue */ /* destroy all events sitting in this groups notification queue */
extern void fsnotify_flush_notify(struct fsnotify_group *group); extern void fsnotify_flush_notify(struct fsnotify_group *group);
......
...@@ -33,9 +33,9 @@ static DEFINE_MUTEX(fsnotify_grp_mutex); ...@@ -33,9 +33,9 @@ static DEFINE_MUTEX(fsnotify_grp_mutex);
/* protects reads while running the fsnotify_groups list */ /* protects reads while running the fsnotify_groups list */
struct srcu_struct fsnotify_grp_srcu; struct srcu_struct fsnotify_grp_srcu;
/* all groups registered to receive filesystem notifications */ /* all groups registered to receive filesystem notifications */
LIST_HEAD(fsnotify_groups); LIST_HEAD(fsnotify_inode_groups);
/* bitwise OR of all events (FS_*) interesting to some group on this system */ /* bitwise OR of all events (FS_*) interesting to some group on this system */
__u32 fsnotify_mask; __u32 fsnotify_inode_mask;
/* /*
* When a new group registers or changes it's set of interesting events * When a new group registers or changes it's set of interesting events
...@@ -48,10 +48,10 @@ void fsnotify_recalc_global_mask(void) ...@@ -48,10 +48,10 @@ void fsnotify_recalc_global_mask(void)
int idx; int idx;
idx = srcu_read_lock(&fsnotify_grp_srcu); idx = srcu_read_lock(&fsnotify_grp_srcu);
list_for_each_entry_rcu(group, &fsnotify_groups, group_list) list_for_each_entry_rcu(group, &fsnotify_inode_groups, inode_group_list)
mask |= group->mask; mask |= group->mask;
srcu_read_unlock(&fsnotify_grp_srcu, idx); srcu_read_unlock(&fsnotify_grp_srcu, idx);
fsnotify_mask = mask; fsnotify_inode_mask = mask;
} }
/* /*
...@@ -77,6 +77,17 @@ void fsnotify_recalc_group_mask(struct fsnotify_group *group) ...@@ -77,6 +77,17 @@ void fsnotify_recalc_group_mask(struct fsnotify_group *group)
fsnotify_recalc_global_mask(); fsnotify_recalc_global_mask();
} }
static void fsnotify_add_group(struct fsnotify_group *group)
{
BUG_ON(!mutex_is_locked(&fsnotify_grp_mutex));
group->on_inode_group_list = 1;
/* being on the fsnotify_groups list holds one num_marks */
atomic_inc(&group->num_marks);
list_add_tail_rcu(&group->inode_group_list, &fsnotify_inode_groups);
}
/* /*
* Final freeing of a group * Final freeing of a group
*/ */
...@@ -118,9 +129,9 @@ static void __fsnotify_evict_group(struct fsnotify_group *group) ...@@ -118,9 +129,9 @@ static void __fsnotify_evict_group(struct fsnotify_group *group)
{ {
BUG_ON(!mutex_is_locked(&fsnotify_grp_mutex)); BUG_ON(!mutex_is_locked(&fsnotify_grp_mutex));
if (group->on_group_list) if (group->on_inode_group_list)
list_del_rcu(&group->group_list); list_del_rcu(&group->inode_group_list);
group->on_group_list = 0; group->on_inode_group_list = 0;
} }
/* /*
...@@ -186,10 +197,7 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops) ...@@ -186,10 +197,7 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
mutex_lock(&fsnotify_grp_mutex); mutex_lock(&fsnotify_grp_mutex);
list_add_rcu(&group->group_list, &fsnotify_groups); fsnotify_add_group(group);
group->on_group_list = 1;
/* being on the fsnotify_groups list holds one num_marks */
atomic_inc(&group->num_marks);
mutex_unlock(&fsnotify_grp_mutex); mutex_unlock(&fsnotify_grp_mutex);
......
...@@ -95,10 +95,10 @@ struct fsnotify_ops { ...@@ -95,10 +95,10 @@ struct fsnotify_ops {
struct fsnotify_group { struct fsnotify_group {
/* /*
* global list of all groups receiving events from fsnotify. * global list of all groups receiving events from fsnotify.
* anchored by fsnotify_groups and protected by either fsnotify_grp_mutex * anchored by fsnotify_inode_groups and protected by either fsnotify_grp_mutex
* or fsnotify_grp_srcu depending on write vs read. * or fsnotify_grp_srcu depending on write vs read.
*/ */
struct list_head group_list; struct list_head inode_group_list;
/* /*
* Defines all of the event types in which this group is interested. * Defines all of the event types in which this group is interested.
...@@ -136,7 +136,7 @@ struct fsnotify_group { ...@@ -136,7 +136,7 @@ struct fsnotify_group {
struct list_head mark_entries; /* all inode mark entries for this group */ struct list_head mark_entries; /* all inode mark entries for this group */
/* prevents double list_del of group_list. protected by global fsnotify_grp_mutex */ /* prevents double list_del of group_list. protected by global fsnotify_grp_mutex */
bool on_group_list; bool on_inode_group_list;
/* groups can define private fields here or use the void *private */ /* groups can define private fields here or use the void *private */
union { union {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment