mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
btrfs: unfold transaction aborts in btrfs_finish_one_ordered()
We have a single transaction abort that can be caused either by a failure from a call to btrfs_mark_extent_written(), if we are dealing with a write to a prealloc extent, or otherwise from a call to insert_ordered_extent_file_extent(). So when the transaction abort happens we can not know for sure which case failed. Unfold the aborts so that it's clear in case of a failure. Reviewed-by: Boris Burkov <boris@bur.io> Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
a8bec25e01
commit
571e75f4c0
|
|
@ -3256,19 +3256,21 @@ int btrfs_finish_one_ordered(struct btrfs_ordered_extent *ordered_extent)
|
|||
logical_len);
|
||||
btrfs_zoned_release_data_reloc_bg(fs_info, ordered_extent->disk_bytenr,
|
||||
ordered_extent->disk_num_bytes);
|
||||
if (unlikely(ret < 0)) {
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
BUG_ON(root == fs_info->tree_root);
|
||||
ret = insert_ordered_extent_file_extent(trans, ordered_extent);
|
||||
if (!ret) {
|
||||
clear_reserved_extent = false;
|
||||
btrfs_release_delalloc_bytes(fs_info,
|
||||
ordered_extent->disk_bytenr,
|
||||
ordered_extent->disk_num_bytes);
|
||||
if (unlikely(ret < 0)) {
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
if (unlikely(ret < 0)) {
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
goto out;
|
||||
clear_reserved_extent = false;
|
||||
btrfs_release_delalloc_bytes(fs_info,
|
||||
ordered_extent->disk_bytenr,
|
||||
ordered_extent->disk_num_bytes);
|
||||
}
|
||||
|
||||
ret = btrfs_unpin_extent_cache(inode, ordered_extent->file_offset,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user