Commit 33ca832f authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba

btrfs: separate out the extent leak code

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: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 34ffafdb
...@@ -59,12 +59,23 @@ void btrfs_leak_debug_del(struct list_head *entry) ...@@ -59,12 +59,23 @@ void btrfs_leak_debug_del(struct list_head *entry)
spin_unlock_irqrestore(&leak_lock, flags); spin_unlock_irqrestore(&leak_lock, flags);
} }
static inline static inline void btrfs_extent_buffer_leak_debug_check(void)
void btrfs_leak_debug_check(void)
{ {
struct extent_state *state;
struct extent_buffer *eb; 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)) { while (!list_empty(&states)) {
state = list_entry(states.next, struct extent_state, leak_list); 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", 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) ...@@ -74,14 +85,6 @@ void btrfs_leak_debug_check(void)
list_del(&state->leak_list); list_del(&state->leak_list);
kmem_cache_free(extent_state_cache, state); 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) \ #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, ...@@ -105,7 +108,8 @@ static inline void __btrfs_debug_check_extent_io_range(const char *caller,
#else #else
#define btrfs_leak_debug_add(new, head) do {} while (0) #define btrfs_leak_debug_add(new, head) do {} while (0)
#define btrfs_leak_debug_del(entry) 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) #define btrfs_debug_check_extent_io_range(c, s, e) do {} while (0)
#endif #endif
...@@ -235,7 +239,8 @@ int __init extent_io_init(void) ...@@ -235,7 +239,8 @@ int __init extent_io_init(void)
void __cold extent_io_exit(void) 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 * Make sure all delayed rcu free are flushed before we
......
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