浏览代码

Btrfs: skip locking if searching the commit root in csum lookup

It's not enough to just search the commit root, since we could be cow'ing the
very block we need to search through, which would mean that its locked and we'll
still deadlock.  So use path->skip_locking as well.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Josef Bacik 13 年之前
父节点
当前提交
ddf23b3fc6
共有 1 个文件被更改,包括 3 次插入1 次删除
  1. 3 1
      fs/btrfs/file-item.c

+ 3 - 1
fs/btrfs/file-item.c

@@ -183,8 +183,10 @@ static int __btrfs_lookup_bio_sums(struct btrfs_root *root,
 	 * read from the commit root and sidestep a nasty deadlock
 	 * read from the commit root and sidestep a nasty deadlock
 	 * between reading the free space cache and updating the csum tree.
 	 * between reading the free space cache and updating the csum tree.
 	 */
 	 */
-	if (btrfs_is_free_space_inode(root, inode))
+	if (btrfs_is_free_space_inode(root, inode)) {
 		path->search_commit_root = 1;
 		path->search_commit_root = 1;
+		path->skip_locking = 1;
+	}
 
 
 	disk_bytenr = (u64)bio->bi_sector << 9;
 	disk_bytenr = (u64)bio->bi_sector << 9;
 	if (dio)
 	if (dio)