Commit 1f80e4db authored by Yan Zheng's avatar Yan Zheng Committed by Chris Mason

Btrfs: set EXTENT_BOUNDARY bit before marking extent delalloc.

There is a race in relocate_inode_pages, it happens when
find_delalloc_range finds the delalloc extent before the
boundary bit is set. Thank you,
Signed-off-by: default avatarYan Zheng <zheng.yan@oracle.com>
parent 34bf63c4
...@@ -3994,10 +3994,10 @@ static int noinline relocate_inode_pages(struct inode *inode, u64 start, ...@@ -3994,10 +3994,10 @@ static int noinline relocate_inode_pages(struct inode *inode, u64 start,
} }
set_page_extent_mapped(page); set_page_extent_mapped(page);
btrfs_set_extent_delalloc(inode, page_start, page_end);
if (i == first_index) if (i == first_index)
set_extent_bits(io_tree, page_start, page_end, set_extent_bits(io_tree, page_start, page_end,
EXTENT_BOUNDARY, GFP_NOFS); EXTENT_BOUNDARY, GFP_NOFS);
btrfs_set_extent_delalloc(inode, page_start, page_end);
set_page_dirty(page); set_page_dirty(page);
total_dirty++; total_dirty++;
...@@ -4405,7 +4405,7 @@ static int noinline get_new_locations(struct inode *reloc_inode, ...@@ -4405,7 +4405,7 @@ static int noinline get_new_locations(struct inode *reloc_inode,
path->slots[0]++; path->slots[0]++;
} }
WARN_ON(cur_pos + offset > last_byte); BUG_ON(cur_pos + offset > last_byte);
if (cur_pos + offset < last_byte) { if (cur_pos + offset < last_byte) {
ret = -ENOENT; ret = -ENOENT;
goto out; goto out;
...@@ -5712,7 +5712,6 @@ int btrfs_relocate_block_group(struct btrfs_root *root, u64 group_start) ...@@ -5712,7 +5712,6 @@ int btrfs_relocate_block_group(struct btrfs_root *root, u64 group_start)
if (pass == 0) { if (pass == 0) {
btrfs_wait_ordered_range(reloc_inode, 0, (u64)-1); btrfs_wait_ordered_range(reloc_inode, 0, (u64)-1);
invalidate_mapping_pages(reloc_inode->i_mapping, 0, -1); invalidate_mapping_pages(reloc_inode->i_mapping, 0, -1);
WARN_ON(reloc_inode->i_mapping->nrpages);
} }
if (total_found > 0) { if (total_found > 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment