浏览代码

Btrfs: loop waiting on writeback

lock_extent_buffer_for_io needs to loop around and make sure the
writeback bits are not set.

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

+ 5 - 5
fs/btrfs/extent_io.c

@@ -3010,12 +3010,12 @@ static int lock_extent_buffer_for_io(struct extent_buffer *eb,
 			flush_write_bio(epd);
 			flush = 1;
 		}
-		wait_on_extent_buffer_writeback(eb);
-		btrfs_tree_lock(eb);
-		if (test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) {
-			printk(KERN_ERR "Um, ok?\n");
+		while (1) {
+			wait_on_extent_buffer_writeback(eb);
+			btrfs_tree_lock(eb);
+			if (!test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags))
+				break;
 			btrfs_tree_unlock(eb);
-			return 0;
 		}
 	}