aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r--fs/btrfs/extent_io.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 1a57c17d4029..a53aca338c7f 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2017,6 +2017,7 @@ static int __extent_read_full_page(struct extent_io_tree *tree,
2017 sector_t sector; 2017 sector_t sector;
2018 struct extent_map *em; 2018 struct extent_map *em;
2019 struct block_device *bdev; 2019 struct block_device *bdev;
2020 struct btrfs_ordered_extent *ordered;
2020 int ret; 2021 int ret;
2021 int nr = 0; 2022 int nr = 0;
2022 size_t page_offset = 0; 2023 size_t page_offset = 0;
@@ -2028,7 +2029,15 @@ static int __extent_read_full_page(struct extent_io_tree *tree,
2028 set_page_extent_mapped(page); 2029 set_page_extent_mapped(page);
2029 2030
2030 end = page_end; 2031 end = page_end;
2031 lock_extent(tree, start, end, GFP_NOFS); 2032 while (1) {
2033 lock_extent(tree, start, end, GFP_NOFS);
2034 ordered = btrfs_lookup_ordered_extent(inode, start);
2035 if (!ordered)
2036 break;
2037 unlock_extent(tree, start, end, GFP_NOFS);
2038 btrfs_start_ordered_extent(inode, ordered, 1);
2039 btrfs_put_ordered_extent(ordered);
2040 }
2032 2041
2033 if (page->index == last_byte >> PAGE_CACHE_SHIFT) { 2042 if (page->index == last_byte >> PAGE_CACHE_SHIFT) {
2034 char *userpage; 2043 char *userpage;