diff options
author | Yan, Zheng <zheng.yan@oracle.com> | 2010-02-04 08:46:56 +0000 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2010-02-04 11:31:44 -0500 |
commit | f044ba7835b84e69c68b620ca8fa27e5ef67759d (patch) | |
tree | 33c21a5b97a61d584f330618c7428d513e5d8aa2 | |
parent | 035fe03a7ad56982b30ab3a522b7b08d58feccd0 (diff) | |
download | linux-stable-f044ba7835b84e69c68b620ca8fa27e5ef67759d.tar.gz linux-stable-f044ba7835b84e69c68b620ca8fa27e5ef67759d.tar.bz2 linux-stable-f044ba7835b84e69c68b620ca8fa27e5ef67759d.zip |
Btrfs: fix race between allocate and release extent buffer.
Increase extent buffer's reference count while holding the lock.
Otherwise it can race with try_release_extent_buffer.
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r-- | fs/btrfs/extent_io.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 96577e8bf9fd..b177ed319612 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3165,10 +3165,9 @@ struct extent_buffer *alloc_extent_buffer(struct extent_io_tree *tree, spin_unlock(&tree->buffer_lock); goto free_eb; } - spin_unlock(&tree->buffer_lock); - /* add one reference for the tree */ atomic_inc(&eb->refs); + spin_unlock(&tree->buffer_lock); return eb; free_eb: |