diff options
Diffstat (limited to 'fs/btrfs/reflink.c')
| -rw-r--r-- | fs/btrfs/reflink.c | 24 | 
1 files changed, 13 insertions, 11 deletions
| diff --git a/fs/btrfs/reflink.c b/fs/btrfs/reflink.c index 62161beca559..ce25ab7f0e99 100644 --- a/fs/btrfs/reflink.c +++ b/fs/btrfs/reflink.c @@ -46,11 +46,9 @@ static int clone_finish_inode_update(struct btrfs_trans_handle *trans,  	if (ret) {  		btrfs_abort_transaction(trans, ret);  		btrfs_end_transaction(trans); -		goto out; +		return ret;  	} -	ret = btrfs_end_transaction(trans); -out: -	return ret; +	return btrfs_end_transaction(trans);  }  static int copy_inline_to_page(struct btrfs_inode *inode, @@ -95,8 +93,8 @@ static int copy_inline_to_page(struct btrfs_inode *inode,  	if (ret < 0)  		goto out_unlock; -	btrfs_clear_extent_bits(&inode->io_tree, file_offset, range_end, -				EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG); +	btrfs_clear_extent_bit(&inode->io_tree, file_offset, range_end, +			       EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING | EXTENT_DEFRAG, NULL);  	ret = btrfs_set_extent_delalloc(inode, file_offset, range_end, 0, NULL);  	if (ret)  		goto out_unlock; @@ -270,11 +268,15 @@ copy_inline_extent:  	drop_args.end = aligned_end;  	drop_args.drop_cache = true;  	ret = btrfs_drop_extents(trans, root, inode, &drop_args); -	if (ret) +	if (ret) { +		btrfs_abort_transaction(trans, ret);  		goto out; +	}  	ret = btrfs_insert_empty_item(trans, root, path, new_key, size); -	if (ret) +	if (ret) { +		btrfs_abort_transaction(trans, ret);  		goto out; +	}  	write_extent_buffer(path->nodes[0], inline_data,  			    btrfs_item_ptr_offset(path->nodes[0], @@ -283,6 +285,8 @@ copy_inline_extent:  	btrfs_update_inode_bytes(inode, datal, drop_args.bytes_found);  	btrfs_set_inode_full_sync(inode);  	ret = btrfs_inode_set_file_extent_range(inode, 0, aligned_end); +	if (ret) +		btrfs_abort_transaction(trans, ret);  out:  	if (!ret && !trans) {  		/* @@ -297,10 +301,8 @@ out:  			trans = NULL;  		}  	} -	if (ret && trans) { -		btrfs_abort_transaction(trans, ret); +	if (ret && trans)  		btrfs_end_transaction(trans); -	}  	if (!ret)  		*trans_out = trans; | 
