Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Filipe Manana and committed by
David Sterba
c7d1d4ff 23d4f616

+12 -8
+12 -8
fs/btrfs/extent-tree.c
··· 1761 1761 struct btrfs_delayed_extent_op *extent_op, 1762 1762 bool insert_reserved) 1763 1763 { 1764 + struct btrfs_fs_info *fs_info = trans->fs_info; 1764 1765 int ret = 0; 1765 1766 1766 1767 if (TRANS_ABORTED(trans)) { 1767 1768 if (insert_reserved) { 1768 1769 btrfs_pin_extent(trans, node->bytenr, node->num_bytes); 1769 - free_head_ref_squota_rsv(trans->fs_info, href); 1770 + free_head_ref_squota_rsv(fs_info, href); 1770 1771 } 1771 1772 return 0; 1772 1773 } 1773 1774 1774 1775 if (node->type == BTRFS_TREE_BLOCK_REF_KEY || 1775 - node->type == BTRFS_SHARED_BLOCK_REF_KEY) 1776 + node->type == BTRFS_SHARED_BLOCK_REF_KEY) { 1776 1777 ret = run_delayed_tree_ref(trans, href, node, extent_op, 1777 1778 insert_reserved); 1778 - else if (node->type == BTRFS_EXTENT_DATA_REF_KEY || 1779 - node->type == BTRFS_SHARED_DATA_REF_KEY) 1779 + } else if (node->type == BTRFS_EXTENT_DATA_REF_KEY || 1780 + node->type == BTRFS_SHARED_DATA_REF_KEY) { 1780 1781 ret = run_delayed_data_ref(trans, href, node, extent_op, 1781 1782 insert_reserved); 1782 - else if (node->type == BTRFS_EXTENT_OWNER_REF_KEY) 1783 + } else if (node->type == BTRFS_EXTENT_OWNER_REF_KEY) { 1783 1784 ret = 0; 1784 - else 1785 - BUG(); 1785 + } else { 1786 + ret = -EUCLEAN; 1787 + btrfs_err(fs_info, "unexpected delayed ref node type: %u", node->type); 1788 + } 1789 + 1786 1790 if (ret && insert_reserved) 1787 1791 btrfs_pin_extent(trans, node->bytenr, node->num_bytes); 1788 1792 if (ret < 0) 1789 - btrfs_err(trans->fs_info, 1793 + btrfs_err(fs_info, 1790 1794 "failed to run delayed ref for logical %llu num_bytes %llu type %u action %u ref_mod %d: %d", 1791 1795 node->bytenr, node->num_bytes, node->type, 1792 1796 node->action, node->ref_mod, ret);