mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
btrfs: unfold transaction abort at btrfs_copy_root()
Instead of having a common btrfs_abort_transaction() call for when any of the two btrfs_inc_ref() calls fail, move the btrfs_abort_transaction() to happen immediately after each one of the calls, so that when analyzing a stack trace with a transaction abort we know which call failed. Reviewed-by: Daniel Vacek <neelx@suse.com> 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
b63c8c1ede
commit
273bbb5b48
|
|
@ -284,14 +284,18 @@ int btrfs_copy_root(struct btrfs_trans_handle *trans,
|
|||
write_extent_buffer_fsid(cow, fs_info->fs_devices->metadata_uuid);
|
||||
|
||||
WARN_ON(btrfs_header_generation(buf) > trans->transid);
|
||||
if (new_root_objectid == BTRFS_TREE_RELOC_OBJECTID)
|
||||
if (new_root_objectid == BTRFS_TREE_RELOC_OBJECTID) {
|
||||
ret = btrfs_inc_ref(trans, root, cow, 1);
|
||||
else
|
||||
if (ret)
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
} else {
|
||||
ret = btrfs_inc_ref(trans, root, cow, 0);
|
||||
if (ret)
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
}
|
||||
if (ret) {
|
||||
btrfs_tree_unlock(cow);
|
||||
free_extent_buffer(cow);
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user