Преглед изворни кода

Btrfs: Take the extent lock before dropping the delalloc bits

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Chris Mason пре 17 година
родитељ
комит
d99cb30a11
1 измењених фајлова са 4 додато и 0 уклоњено
  1. 4 0
      fs/btrfs/file.c

+ 4 - 0
fs/btrfs/file.c

@@ -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;
 }