fsnotify: Move fsnotify_destroy_marks()
authorJan Kara <jack@suse.cz>
Wed, 1 Feb 2017 08:23:48 +0000 (09:23 +0100)
committerJan Kara <jack@suse.cz>
Mon, 10 Apr 2017 15:37:35 +0000 (17:37 +0200)
Move fsnotify_destroy_marks() to be later in the fs/notify/mark.c. It
will need some functions that are declared after its current
declaration. No functional change.

Reviewed-by: Miklos Szeredi <mszeredi@redhat.com>
Reviewed-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/notify/mark.c

index e8c2f82..b3f83ed 100644 (file)
@@ -224,42 +224,6 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark,
        fsnotify_free_mark(mark);
 }
 
-void fsnotify_destroy_marks(struct fsnotify_mark_connector *conn,
-                           spinlock_t *lock)
-{
-       struct fsnotify_mark *mark;
-
-       if (!conn)
-               return;
-
-       while (1) {
-               /*
-                * We have to be careful since we can race with e.g.
-                * fsnotify_clear_marks_by_group() and once we drop 'lock',
-                * mark can get removed from the obj_list and destroyed. But
-                * we are holding mark reference so mark cannot be freed and
-                * calling fsnotify_destroy_mark() more than once is fine.
-                */
-               spin_lock(lock);
-               if (hlist_empty(&conn->list)) {
-                       spin_unlock(lock);
-                       break;
-               }
-               mark = hlist_entry(conn->list.first, struct fsnotify_mark,
-                                  obj_list);
-               /*
-                * We don't update i_fsnotify_mask / mnt_fsnotify_mask here
-                * since inode / mount is going away anyway. So just remove
-                * mark from the list.
-                */
-               hlist_del_init_rcu(&mark->obj_list);
-               fsnotify_get_mark(mark);
-               spin_unlock(lock);
-               fsnotify_destroy_mark(mark, mark->group);
-               fsnotify_put_mark(mark);
-       }
-}
-
 void fsnotify_connector_free(struct fsnotify_mark_connector **connp)
 {
        if (*connp) {
@@ -580,6 +544,42 @@ void fsnotify_detach_group_marks(struct fsnotify_group *group)
        }
 }
 
+void fsnotify_destroy_marks(struct fsnotify_mark_connector *conn,
+                           spinlock_t *lock)
+{
+       struct fsnotify_mark *mark;
+
+       if (!conn)
+               return;
+
+       while (1) {
+               /*
+                * We have to be careful since we can race with e.g.
+                * fsnotify_clear_marks_by_group() and once we drop 'lock',
+                * mark can get removed from the obj_list and destroyed. But
+                * we are holding mark reference so mark cannot be freed and
+                * calling fsnotify_destroy_mark() more than once is fine.
+                */
+               spin_lock(lock);
+               if (hlist_empty(&conn->list)) {
+                       spin_unlock(lock);
+                       break;
+               }
+               mark = hlist_entry(conn->list.first, struct fsnotify_mark,
+                                  obj_list);
+               /*
+                * We don't update i_fsnotify_mask / mnt_fsnotify_mask here
+                * since inode / mount is going away anyway. So just remove
+                * mark from the list.
+                */
+               hlist_del_init_rcu(&mark->obj_list);
+               fsnotify_get_mark(mark);
+               spin_unlock(lock);
+               fsnotify_destroy_mark(mark, mark->group);
+               fsnotify_put_mark(mark);
+       }
+}
+
 /*
  * Nothing fancy, just initialize lists and locks and counters.
  */