|
@@ -1083,40 +1083,33 @@ int btrfs_wait_tree_log_extents(struct btrfs_root *log_root, int mark)
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
- * when btree blocks are allocated, they have some corresponding bits set for
|
|
|
|
- * them in one of two extent_io trees. This is used to make sure all of
|
|
|
|
- * those extents are on disk for transaction or log commit
|
|
|
|
|
|
+ * When btree blocks are allocated the corresponding extents are marked dirty.
|
|
|
|
+ * This function ensures such extents are persisted on disk for transaction or
|
|
|
|
+ * log commit.
|
|
|
|
+ *
|
|
|
|
+ * @trans: transaction whose dirty pages we'd like to write
|
|
*/
|
|
*/
|
|
-static int btrfs_write_and_wait_marked_extents(struct btrfs_fs_info *fs_info,
|
|
|
|
- struct extent_io_tree *dirty_pages, int mark)
|
|
|
|
|
|
+static int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans,
|
|
|
|
+ struct btrfs_fs_info *fs_info)
|
|
{
|
|
{
|
|
int ret;
|
|
int ret;
|
|
int ret2;
|
|
int ret2;
|
|
|
|
+ struct extent_io_tree *dirty_pages = &trans->transaction->dirty_pages;
|
|
struct blk_plug plug;
|
|
struct blk_plug plug;
|
|
|
|
|
|
blk_start_plug(&plug);
|
|
blk_start_plug(&plug);
|
|
- ret = btrfs_write_marked_extents(fs_info, dirty_pages, mark);
|
|
|
|
|
|
+ ret = btrfs_write_marked_extents(fs_info, dirty_pages, EXTENT_DIRTY);
|
|
blk_finish_plug(&plug);
|
|
blk_finish_plug(&plug);
|
|
ret2 = btrfs_wait_extents(fs_info, dirty_pages);
|
|
ret2 = btrfs_wait_extents(fs_info, dirty_pages);
|
|
|
|
|
|
|
|
+ clear_btree_io_tree(&trans->transaction->dirty_pages);
|
|
|
|
+
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|
|
- if (ret2)
|
|
|
|
|
|
+ else if (ret2)
|
|
return ret2;
|
|
return ret2;
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans,
|
|
|
|
- struct btrfs_fs_info *fs_info)
|
|
|
|
-{
|
|
|
|
- int ret;
|
|
|
|
-
|
|
|
|
- ret = btrfs_write_and_wait_marked_extents(fs_info,
|
|
|
|
- &trans->transaction->dirty_pages,
|
|
|
|
- EXTENT_DIRTY);
|
|
|
|
- clear_btree_io_tree(&trans->transaction->dirty_pages);
|
|
|
|
-
|
|
|
|
- return ret;
|
|
|
|
|
|
+ else
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|