fsnotify: initialize the group->num_marks in a better place
authorEric Paris <eparis@redhat.com>
Fri, 18 Dec 2009 02:24:23 +0000 (21:24 -0500)
committerEric Paris <eparis@redhat.com>
Wed, 28 Jul 2010 13:58:51 +0000 (09:58 -0400)
Currently the comments say that group->num_marks is held because the group
is on the fsnotify_group list.  This isn't strictly the case, we really
just hold the num_marks for the life of the group (any time group->refcnt
is != 0)  This patch moves the initialization stuff and makes it clear when
it is really being held.

Signed-off-by: Eric Paris <eparis@redhat.com>
fs/notify/group.c

index c80809745312be8286c4efe48a5eb5f801444821..656c534ffb666975b6b0bc40b885c8a67251a919 100644 (file)
@@ -82,9 +82,6 @@ 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);
 }
 
@@ -183,7 +180,14 @@ struct fsnotify_group *fsnotify_alloc_group(const struct fsnotify_ops *ops)
        if (!group)
                return ERR_PTR(-ENOMEM);
 
+       /* set to 0 when there a no external references to this group */
        atomic_set(&group->refcnt, 1);
+       /*
+        * hits 0 when there are no external references AND no marks for
+        * this group
+        */
+       atomic_set(&group->num_marks, 1);
+
 
        mutex_init(&group->notification_mutex);
        INIT_LIST_HEAD(&group->notification_list);