Btrfs: Take the extent lock before dropping the delalloc bits
authorChris Mason <chris.mason@oracle.com>
Tue, 19 Feb 2008 17:55:05 +0000 (12:55 -0500)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:00 +0000 (11:04 -0400)
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/file.c

index 1a47251..51466dc 100644 (file)
@@ -765,9 +765,13 @@ static int prepare_pages(struct btrfs_root *root, struct file *file,
        if (start_pos < inode->i_size) {
                u64 last_pos;
                last_pos = (index + num_pages) << PAGE_CACHE_SHIFT;
+               lock_extent(&BTRFS_I(inode)->io_tree,
+                           start_pos, last_pos - 1, GFP_NOFS);
                clear_extent_bits(&BTRFS_I(inode)->io_tree, start_pos,
                                  last_pos - 1, EXTENT_DIRTY | EXTENT_DELALLOC,
                                  GFP_NOFS);
+               unlock_extent(&BTRFS_I(inode)->io_tree,
+                             start_pos, last_pos - 1, GFP_NOFS);
        }
        return 0;
 }