btrfs: abort transaction when sibling keys check fails for leaves
authorFilipe Manana <fdmanana@suse.com>
Wed, 26 Apr 2023 10:51:35 +0000 (11:51 +0100)
committerDavid Sterba <dsterba@suse.com>
Fri, 28 Apr 2023 14:36:37 +0000 (16:36 +0200)
commit9ae5afd02a03d4e22a17a9609b19400b77c36273
tree0bc87ff844846630dba1aad3ef2f3ff2bfba710b
parent611ccc58e1f2ccd4a85258a646d5f9b4d5b1b4f6
btrfs: abort transaction when sibling keys check fails for leaves

If the sibling keys check fails before we move keys from one sibling
leaf to another, we are not aborting the transaction - we leave that to
some higher level caller of btrfs_search_slot() (or anything else that
uses it to insert items into a b+tree).

This means that the transaction abort will provide a stack trace that
omits the b+tree modification call chain. So change this to immediately
abort the transaction and therefore get a more useful stack trace that
shows us the call chain in the bt+tree modification code.

It's also important to immediately abort the transaction just in case
some higher level caller is not doing it, as this indicates a very
serious corruption and we should stop the possibility of doing further
damage.

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>
fs/btrfs/ctree.c