Btrfs: Take the extent lock before dropping the delalloc bits

Signed-off-by: Chris Mason <chris.mason@oracle.com>
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 1a47251..51466dc 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -765,9 +765,13 @@
 	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;
 }