Commit 3935127c authored by Chris Mason's avatar Chris Mason

Btrfs: disable leak debugging checks in extent_io.c

extent_io.c has debugging code to report and free leaked extent_state
and extent_buffer objects at rmmod time.  This helps track down
leaks and it saves you from rebooting just to properly remove the
kmem_cache object.

But, the code runs under a fairly expensive spinlock and the checks to
see if it is currently enabled are not entirely consistent.  Some use
#ifdef and some #if.

This changes everything to #if and disables the leak checking.
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent b7a9f29f
...@@ -30,7 +30,7 @@ static LIST_HEAD(buffers); ...@@ -30,7 +30,7 @@ static LIST_HEAD(buffers);
static LIST_HEAD(states); static LIST_HEAD(states);
#define LEAK_DEBUG 0 #define LEAK_DEBUG 0
#ifdef LEAK_DEBUG #if LEAK_DEBUG
static DEFINE_SPINLOCK(leak_lock); static DEFINE_SPINLOCK(leak_lock);
#endif #endif
...@@ -119,7 +119,7 @@ void extent_io_tree_init(struct extent_io_tree *tree, ...@@ -119,7 +119,7 @@ void extent_io_tree_init(struct extent_io_tree *tree,
static struct extent_state *alloc_extent_state(gfp_t mask) static struct extent_state *alloc_extent_state(gfp_t mask)
{ {
struct extent_state *state; struct extent_state *state;
#ifdef LEAK_DEBUG #if LEAK_DEBUG
unsigned long flags; unsigned long flags;
#endif #endif
...@@ -129,7 +129,7 @@ static struct extent_state *alloc_extent_state(gfp_t mask) ...@@ -129,7 +129,7 @@ static struct extent_state *alloc_extent_state(gfp_t mask)
state->state = 0; state->state = 0;
state->private = 0; state->private = 0;
state->tree = NULL; state->tree = NULL;
#ifdef LEAK_DEBUG #if LEAK_DEBUG
spin_lock_irqsave(&leak_lock, flags); spin_lock_irqsave(&leak_lock, flags);
list_add(&state->leak_list, &states); list_add(&state->leak_list, &states);
spin_unlock_irqrestore(&leak_lock, flags); spin_unlock_irqrestore(&leak_lock, flags);
...@@ -144,11 +144,11 @@ static void free_extent_state(struct extent_state *state) ...@@ -144,11 +144,11 @@ static void free_extent_state(struct extent_state *state)
if (!state) if (!state)
return; return;
if (atomic_dec_and_test(&state->refs)) { if (atomic_dec_and_test(&state->refs)) {
#ifdef LEAK_DEBUG #if LEAK_DEBUG
unsigned long flags; unsigned long flags;
#endif #endif
WARN_ON(state->tree); WARN_ON(state->tree);
#ifdef LEAK_DEBUG #if LEAK_DEBUG
spin_lock_irqsave(&leak_lock, flags); spin_lock_irqsave(&leak_lock, flags);
list_del(&state->leak_list); list_del(&state->leak_list);
spin_unlock_irqrestore(&leak_lock, flags); spin_unlock_irqrestore(&leak_lock, flags);
...@@ -2983,7 +2983,7 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree, ...@@ -2983,7 +2983,7 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
gfp_t mask) gfp_t mask)
{ {
struct extent_buffer *eb = NULL; struct extent_buffer *eb = NULL;
#ifdef LEAK_DEBUG #if LEAK_DEBUG
unsigned long flags; unsigned long flags;
#endif #endif
...@@ -2991,7 +2991,7 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree, ...@@ -2991,7 +2991,7 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
eb->start = start; eb->start = start;
eb->len = len; eb->len = len;
mutex_init(&eb->mutex); mutex_init(&eb->mutex);
#ifdef LEAK_DEBUG #if LEAK_DEBUG
spin_lock_irqsave(&leak_lock, flags); spin_lock_irqsave(&leak_lock, flags);
list_add(&eb->leak_list, &buffers); list_add(&eb->leak_list, &buffers);
spin_unlock_irqrestore(&leak_lock, flags); spin_unlock_irqrestore(&leak_lock, flags);
...@@ -3003,7 +3003,7 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree, ...@@ -3003,7 +3003,7 @@ static struct extent_buffer *__alloc_extent_buffer(struct extent_io_tree *tree,
static void __free_extent_buffer(struct extent_buffer *eb) static void __free_extent_buffer(struct extent_buffer *eb)
{ {
#ifdef LEAK_DEBUG #if LEAK_DEBUG
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&leak_lock, flags); spin_lock_irqsave(&leak_lock, flags);
list_del(&eb->leak_list); list_del(&eb->leak_list);
......
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