Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d788a349 authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason
Browse files

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: default avatarJosef Bacik <jbacik@fusionio.com>
Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
parent 02ecd2c2
Loading
Loading
Loading
Loading
+5 −15
Original line number Diff line number Diff line
@@ -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);