btrfs: separate out the extent leak code
authorJosef Bacik <josef@toxicpanda.com>
Mon, 23 Sep 2019 14:05:17 +0000 (10:05 -0400)
committerDavid Sterba <dsterba@suse.com>
Mon, 18 Nov 2019 11:46:46 +0000 (12:46 +0100)
We check both extent buffer and extent state leaks in the same function,
separate these two functions out so we can move them around.

Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index cceaf05aada269ef659cba385a984459f2e5f911..1a17218d756d51e695842e5ee43969ac5049faef 100644 (file)
@@ -59,12 +59,23 @@ void btrfs_leak_debug_del(struct list_head *entry)
        spin_unlock_irqrestore(&leak_lock, flags);
 }
 
-static inline
-void btrfs_leak_debug_check(void)
+static inline void btrfs_extent_buffer_leak_debug_check(void)
 {
-       struct extent_state *state;
        struct extent_buffer *eb;
 
+       while (!list_empty(&buffers)) {
+               eb = list_entry(buffers.next, struct extent_buffer, leak_list);
+               pr_err("BTRFS: buffer leak start %llu len %lu refs %d bflags %lu\n",
+                      eb->start, eb->len, atomic_read(&eb->refs), eb->bflags);
+               list_del(&eb->leak_list);
+               kmem_cache_free(extent_buffer_cache, eb);
+       }
+}
+
+static inline void btrfs_extent_state_leak_debug_check(void)
+{
+       struct extent_state *state;
+
        while (!list_empty(&states)) {
                state = list_entry(states.next, struct extent_state, leak_list);
                pr_err("BTRFS: state leak: start %llu end %llu state %u in tree %d refs %d\n",
@@ -74,14 +85,6 @@ void btrfs_leak_debug_check(void)
                list_del(&state->leak_list);
                kmem_cache_free(extent_state_cache, state);
        }
-
-       while (!list_empty(&buffers)) {
-               eb = list_entry(buffers.next, struct extent_buffer, leak_list);
-               pr_err("BTRFS: buffer leak start %llu len %lu refs %d bflags %lu\n",
-                      eb->start, eb->len, atomic_read(&eb->refs), eb->bflags);
-               list_del(&eb->leak_list);
-               kmem_cache_free(extent_buffer_cache, eb);
-       }
 }
 
 #define btrfs_debug_check_extent_io_range(tree, start, end)            \
@@ -105,7 +108,8 @@ static inline void __btrfs_debug_check_extent_io_range(const char *caller,
 #else
 #define btrfs_leak_debug_add(new, head)        do {} while (0)
 #define btrfs_leak_debug_del(entry)    do {} while (0)
-#define btrfs_leak_debug_check()       do {} while (0)
+#define btrfs_extent_buffer_leak_debug_check() do {} while (0)
+#define btrfs_extent_state_leak_debug_check()  do {} while (0)
 #define btrfs_debug_check_extent_io_range(c, s, e)     do {} while (0)
 #endif
 
@@ -235,7 +239,8 @@ free_state_cache:
 
 void __cold extent_io_exit(void)
 {
-       btrfs_leak_debug_check();
+       btrfs_extent_buffer_leak_debug_check();
+       btrfs_extent_state_leak_debug_check();
 
        /*
         * Make sure all delayed rcu free are flushed before we