Btrfs: Fix releasepage to properly keep dirty and writeback pages
Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
8d5bf1cb35
commit
98509cfc5a
|
@ -346,7 +346,7 @@ int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end,
|
||||||
eb = alloc_extent_buffer(tree, start, len, page, GFP_NOFS);
|
eb = alloc_extent_buffer(tree, start, len, page, GFP_NOFS);
|
||||||
|
|
||||||
found_start = btrfs_header_bytenr(eb);
|
found_start = btrfs_header_bytenr(eb);
|
||||||
if (found_start != start) {
|
if (0 && found_start != start) {
|
||||||
printk("bad tree block start %llu %llu\n",
|
printk("bad tree block start %llu %llu\n",
|
||||||
(unsigned long long)found_start,
|
(unsigned long long)found_start,
|
||||||
(unsigned long long)eb->start);
|
(unsigned long long)eb->start);
|
||||||
|
@ -592,6 +592,9 @@ static int btree_releasepage(struct page *page, gfp_t gfp_flags)
|
||||||
struct extent_map_tree *map;
|
struct extent_map_tree *map;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (PageWriteback(page) || PageDirty(page))
|
||||||
|
return 0;
|
||||||
|
|
||||||
tree = &BTRFS_I(page->mapping->host)->io_tree;
|
tree = &BTRFS_I(page->mapping->host)->io_tree;
|
||||||
map = &BTRFS_I(page->mapping->host)->extent_tree;
|
map = &BTRFS_I(page->mapping->host)->extent_tree;
|
||||||
|
|
||||||
|
|
|
@ -3060,6 +3060,8 @@ static int __btrfs_releasepage(struct page *page, gfp_t gfp_flags)
|
||||||
|
|
||||||
static int btrfs_releasepage(struct page *page, gfp_t gfp_flags)
|
static int btrfs_releasepage(struct page *page, gfp_t gfp_flags)
|
||||||
{
|
{
|
||||||
|
if (PageWriteback(page) || PageDirty(page))
|
||||||
|
return 0;
|
||||||
return __btrfs_releasepage(page, gfp_flags);
|
return __btrfs_releasepage(page, gfp_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue