diff options
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index ba41da59e31b..0cee46e01081 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/swap.h> | 10 | #include <linux/swap.h> |
11 | #include <linux/writeback.h> | 11 | #include <linux/writeback.h> |
12 | #include <linux/pagevec.h> | 12 | #include <linux/pagevec.h> |
13 | #include <linux/cleancache.h> | ||
13 | #include "extent_io.h" | 14 | #include "extent_io.h" |
14 | #include "extent_map.h" | 15 | #include "extent_map.h" |
15 | #include "compat.h" | 16 | #include "compat.h" |
@@ -2015,6 +2016,13 @@ static int __extent_read_full_page(struct extent_io_tree *tree, | |||
2015 | 2016 | ||
2016 | set_page_extent_mapped(page); | 2017 | set_page_extent_mapped(page); |
2017 | 2018 | ||
2019 | if (!PageUptodate(page)) { | ||
2020 | if (cleancache_get_page(page) == 0) { | ||
2021 | BUG_ON(blocksize != PAGE_SIZE); | ||
2022 | goto out; | ||
2023 | } | ||
2024 | } | ||
2025 | |||
2018 | end = page_end; | 2026 | end = page_end; |
2019 | while (1) { | 2027 | while (1) { |
2020 | lock_extent(tree, start, end, GFP_NOFS); | 2028 | lock_extent(tree, start, end, GFP_NOFS); |
@@ -2148,6 +2156,7 @@ static int __extent_read_full_page(struct extent_io_tree *tree, | |||
2148 | cur = cur + iosize; | 2156 | cur = cur + iosize; |
2149 | page_offset += iosize; | 2157 | page_offset += iosize; |
2150 | } | 2158 | } |
2159 | out: | ||
2151 | if (!nr) { | 2160 | if (!nr) { |
2152 | if (!PageError(page)) | 2161 | if (!PageError(page)) |
2153 | SetPageUptodate(page); | 2162 | SetPageUptodate(page); |