| From 6f7ff6d7832c6be13e8c95598884dbc40ad69fb7 Mon Sep 17 00:00:00 2001 |
| From: Filipe Manana <fdmanana@suse.com> |
| Date: Wed, 2 Jul 2014 20:07:54 +0100 |
| Subject: Btrfs: read lock extent buffer while walking backrefs |
| |
| From: Filipe Manana <fdmanana@suse.com> |
| |
| commit 6f7ff6d7832c6be13e8c95598884dbc40ad69fb7 upstream. |
| |
| Before processing the extent buffer, acquire a read lock on it, so |
| that we're safe against concurrent updates on the extent buffer. |
| |
| Signed-off-by: Filipe Manana <fdmanana@suse.com> |
| Signed-off-by: Chris Mason <clm@fb.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/btrfs/backref.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/fs/btrfs/backref.c |
| +++ b/fs/btrfs/backref.c |
| @@ -1000,8 +1000,11 @@ again: |
| ret = -EIO; |
| goto out; |
| } |
| + btrfs_tree_read_lock(eb); |
| + btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK); |
| ret = find_extent_in_eb(eb, bytenr, |
| *extent_item_pos, &eie); |
| + btrfs_tree_read_unlock_blocking(eb); |
| free_extent_buffer(eb); |
| if (ret < 0) |
| goto out; |