Message ID | 20211201115617.144434-1-wqu@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: replace the BUG_ON() in btrfs_del_root_ref() with proper error handling | expand |
On Wed, Dec 01, 2021 at 07:56:17PM +0800, Qu Wenruo wrote: > I hit the BUG_ON() with generic/475 test case, and to my surprise, all > callers of btrfs_del_root_ref() are already aborting transaction, thus > there is not need for such BUG_ON(), just go to @out label and caller > will properly handle the error. > > Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Thanks, Josef
On Wed, Dec 01, 2021 at 07:56:17PM +0800, Qu Wenruo wrote: > I hit the BUG_ON() with generic/475 test case, and to my surprise, all > callers of btrfs_del_root_ref() are already aborting transaction, thus > there is not need for such BUG_ON(), just go to @out label and caller > will properly handle the error. > > Signed-off-by: Qu Wenruo <wqu@suse.com> Added to misc-next, thanks.
diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c index aa2809796c0e..3d68d2dcd83e 100644 --- a/fs/btrfs/root-tree.c +++ b/fs/btrfs/root-tree.c @@ -334,7 +334,8 @@ int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id, key.offset = ref_id; again: ret = btrfs_search_slot(trans, tree_root, &key, path, -1, 1); - BUG_ON(ret < 0); + if (ret < 0) + goto out; if (ret == 0) { leaf = path->nodes[0]; ref = btrfs_item_ptr(leaf, path->slots[0],
I hit the BUG_ON() with generic/475 test case, and to my surprise, all callers of btrfs_del_root_ref() are already aborting transaction, thus there is not need for such BUG_ON(), just go to @out label and caller will properly handle the error. Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/btrfs/root-tree.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)