提交 d788a349 编写于 作者: J Josef Bacik 提交者: Chris Mason

Btrfs: don't abort transaction in run_delalloc_nocow

This is just the write path, the only reason we start a transaction is so we can
check cross references, we don't make any actual changes, so there is no reason
to abort the transaction if we fail.  Thanks,
Signed-off-by: NJosef Bacik <jbacik@fusionio.com>
Signed-off-by: NChris Mason <chris.mason@fusionio.com>
上级 02ecd2c2
......@@ -1180,10 +1180,8 @@ static noinline int run_delalloc_nocow(struct inode *inode,
while (1) {
ret = btrfs_lookup_file_extent(trans, root, path, ino,
cur_offset, 0);
if (ret < 0) {
btrfs_abort_transaction(trans, root, ret);
if (ret < 0)
goto error;
}
if (ret > 0 && path->slots[0] > 0 && check_prev) {
leaf = path->nodes[0];
btrfs_item_key_to_cpu(leaf, &found_key,
......@@ -1197,10 +1195,8 @@ static noinline int run_delalloc_nocow(struct inode *inode,
leaf = path->nodes[0];
if (path->slots[0] >= btrfs_header_nritems(leaf)) {
ret = btrfs_next_leaf(root, path);
if (ret < 0) {
btrfs_abort_transaction(trans, root, ret);
if (ret < 0)
goto error;
}
if (ret > 0)
break;
leaf = path->nodes[0];
......@@ -1291,10 +1287,8 @@ static noinline int run_delalloc_nocow(struct inode *inode,
ret = cow_file_range(inode, locked_page,
cow_start, found_key.offset - 1,
page_started, nr_written, 1);
if (ret) {
btrfs_abort_transaction(trans, root, ret);
if (ret)
goto error;
}
cow_start = (u64)-1;
}
......@@ -1341,11 +1335,9 @@ static noinline int run_delalloc_nocow(struct inode *inode,
BTRFS_DATA_RELOC_TREE_OBJECTID) {
ret = btrfs_reloc_clone_csums(inode, cur_offset,
num_bytes);
if (ret) {
btrfs_abort_transaction(trans, root, ret);
if (ret)
goto error;
}
}
extent_clear_unlock_delalloc(inode, cur_offset,
cur_offset + num_bytes - 1,
......@@ -1366,11 +1358,9 @@ static noinline int run_delalloc_nocow(struct inode *inode,
if (cow_start != (u64)-1) {
ret = cow_file_range(inode, locked_page, cow_start, end,
page_started, nr_written, 1);
if (ret) {
btrfs_abort_transaction(trans, root, ret);
if (ret)
goto error;
}
}
error:
err = btrfs_end_transaction(trans, root);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册