mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
btrfs: don't BUG() on unexpected delayed ref type in run_one_delayed_ref()
There is no need to BUG(), we can just return an error and log an error message. 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
23d4f616cb
commit
c7d1d4ff56
|
|
@ -1761,32 +1761,36 @@ static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
|
|||
struct btrfs_delayed_extent_op *extent_op,
|
||||
bool insert_reserved)
|
||||
{
|
||||
struct btrfs_fs_info *fs_info = trans->fs_info;
|
||||
int ret = 0;
|
||||
|
||||
if (TRANS_ABORTED(trans)) {
|
||||
if (insert_reserved) {
|
||||
btrfs_pin_extent(trans, node->bytenr, node->num_bytes);
|
||||
free_head_ref_squota_rsv(trans->fs_info, href);
|
||||
free_head_ref_squota_rsv(fs_info, href);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (node->type == BTRFS_TREE_BLOCK_REF_KEY ||
|
||||
node->type == BTRFS_SHARED_BLOCK_REF_KEY)
|
||||
node->type == BTRFS_SHARED_BLOCK_REF_KEY) {
|
||||
ret = run_delayed_tree_ref(trans, href, node, extent_op,
|
||||
insert_reserved);
|
||||
else if (node->type == BTRFS_EXTENT_DATA_REF_KEY ||
|
||||
node->type == BTRFS_SHARED_DATA_REF_KEY)
|
||||
} else if (node->type == BTRFS_EXTENT_DATA_REF_KEY ||
|
||||
node->type == BTRFS_SHARED_DATA_REF_KEY) {
|
||||
ret = run_delayed_data_ref(trans, href, node, extent_op,
|
||||
insert_reserved);
|
||||
else if (node->type == BTRFS_EXTENT_OWNER_REF_KEY)
|
||||
} else if (node->type == BTRFS_EXTENT_OWNER_REF_KEY) {
|
||||
ret = 0;
|
||||
else
|
||||
BUG();
|
||||
} else {
|
||||
ret = -EUCLEAN;
|
||||
btrfs_err(fs_info, "unexpected delayed ref node type: %u", node->type);
|
||||
}
|
||||
|
||||
if (ret && insert_reserved)
|
||||
btrfs_pin_extent(trans, node->bytenr, node->num_bytes);
|
||||
if (ret < 0)
|
||||
btrfs_err(trans->fs_info,
|
||||
btrfs_err(fs_info,
|
||||
"failed to run delayed ref for logical %llu num_bytes %llu type %u action %u ref_mod %d: %d",
|
||||
node->bytenr, node->num_bytes, node->type,
|
||||
node->action, node->ref_mod, ret);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user