diff options
Diffstat (limited to 'fs/btrfs/locking.c')
-rw-r--r-- | fs/btrfs/locking.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/btrfs/locking.c b/fs/btrfs/locking.c index 80813a307b4b..058a506a0dd8 100644 --- a/fs/btrfs/locking.c +++ b/fs/btrfs/locking.c | |||
@@ -27,6 +27,16 @@ | |||
27 | 27 | ||
28 | int btrfs_tree_lock(struct extent_buffer *eb) | 28 | int btrfs_tree_lock(struct extent_buffer *eb) |
29 | { | 29 | { |
30 | int i; | ||
31 | |||
32 | if (!TestSetPageLocked(eb->first_page)) | ||
33 | return 0; | ||
34 | for (i = 0; i < 512; i++) { | ||
35 | cpu_relax(); | ||
36 | if (!TestSetPageLocked(eb->first_page)) | ||
37 | return 0; | ||
38 | } | ||
39 | cpu_relax(); | ||
30 | lock_page(eb->first_page); | 40 | lock_page(eb->first_page); |
31 | return 0; | 41 | return 0; |
32 | } | 42 | } |