Commit 0762704b authored by Chris Mason's avatar Chris Mason

Btrfs: Properly clear dirty and delalloc extent bits while preparing the file for write

Yan Zheng noticed that we don't clear the extent state tree dirty and delalloc
bits when we clear the dirty bits on the page during file write.

This leads to csum errors later on.
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 952fccac
...@@ -762,6 +762,13 @@ static int prepare_pages(struct btrfs_root *root, struct file *file, ...@@ -762,6 +762,13 @@ static int prepare_pages(struct btrfs_root *root, struct file *file,
set_page_extent_mapped(pages[i]); set_page_extent_mapped(pages[i]);
WARN_ON(!PageLocked(pages[i])); WARN_ON(!PageLocked(pages[i]));
} }
if (start_pos < inode->i_size) {
u64 last_pos;
last_pos = (index + num_pages) << PAGE_CACHE_SHIFT;
clear_extent_bits(&BTRFS_I(inode)->io_tree, start_pos,
last_pos - 1, EXTENT_DIRTY | EXTENT_DELALLOC,
GFP_NOFS);
}
return 0; return 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