aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/file.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-02-19 11:29:24 -0500
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:04:00 -0400
commit0762704b196d41941a9b439e9165efaf85c6609e (patch)
tree2bbb1a222d7b0ccbd23da5cf614a8507338390a6 /fs/btrfs/file.c
parent952fccac50350481742425cac0c80f36ba8b83f2 (diff)
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: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r--fs/btrfs/file.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index b0352b5958a5..1a47251a9d4d 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -762,6 +762,13 @@ static int prepare_pages(struct btrfs_root *root, struct file *file,
762 set_page_extent_mapped(pages[i]); 762 set_page_extent_mapped(pages[i]);
763 WARN_ON(!PageLocked(pages[i])); 763 WARN_ON(!PageLocked(pages[i]));
764 } 764 }
765 if (start_pos < inode->i_size) {
766 u64 last_pos;
767 last_pos = (index + num_pages) << PAGE_CACHE_SHIFT;
768 clear_extent_bits(&BTRFS_I(inode)->io_tree, start_pos,
769 last_pos - 1, EXTENT_DIRTY | EXTENT_DELALLOC,
770 GFP_NOFS);
771 }
765 return 0; 772 return 0;
766} 773}
767 774