From: Yan, Zheng <zheng.yan@oracle.com>
Date: Thu, 4 Feb 2010 08:46:56 +0000 (+0000)
Subject: Btrfs: fix race between allocate and release extent buffer.
X-Git-Tag: firefly_0821_release~9833^2~2151^2~56
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=f044ba7835b84e69c68b620ca8fa27e5ef67759d;p=firefly-linux-kernel-4.4.55.git

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>
---

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: