diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-02-19 12:55:05 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:04:00 -0400 |
commit | d99cb30a11ea117ad0f58cda09aa43438ebbf81c (patch) | |
tree | 92e6faa3509b1cc4eab21e31ae132d04478d286d /fs/btrfs/file.c | |
parent | 5e591a0703bc03047d37938586f97fd8ca960c08 (diff) |
Btrfs: Take the extent lock before dropping the delalloc bits
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/file.c')
-rw-r--r-- | fs/btrfs/file.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 1a47251a9d4d..51466dcd44e0 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c | |||
@@ -765,9 +765,13 @@ static int prepare_pages(struct btrfs_root *root, struct file *file, | |||
765 | if (start_pos < inode->i_size) { | 765 | if (start_pos < inode->i_size) { |
766 | u64 last_pos; | 766 | u64 last_pos; |
767 | last_pos = (index + num_pages) << PAGE_CACHE_SHIFT; | 767 | last_pos = (index + num_pages) << PAGE_CACHE_SHIFT; |
768 | lock_extent(&BTRFS_I(inode)->io_tree, | ||
769 | start_pos, last_pos - 1, GFP_NOFS); | ||
768 | clear_extent_bits(&BTRFS_I(inode)->io_tree, start_pos, | 770 | clear_extent_bits(&BTRFS_I(inode)->io_tree, start_pos, |
769 | last_pos - 1, EXTENT_DIRTY | EXTENT_DELALLOC, | 771 | last_pos - 1, EXTENT_DIRTY | EXTENT_DELALLOC, |
770 | GFP_NOFS); | 772 | GFP_NOFS); |
773 | unlock_extent(&BTRFS_I(inode)->io_tree, | ||
774 | start_pos, last_pos - 1, GFP_NOFS); | ||
771 | } | 775 | } |
772 | return 0; | 776 | return 0; |
773 | } | 777 | } |