]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: fix lost error handling when looking up extended ref on log replay
authorFilipe Manana <fdmanana@suse.com>
Mon, 1 Aug 2022 13:57:51 +0000 (14:57 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 17 Aug 2022 14:19:45 +0000 (16:19 +0200)
commit1da67fecacc6481f8dfde522739df383f4e7098c
tree7f669910ad2fe09b667a01532b91f12ddc6fd89e
parente8347a4c7377aa4f5a22b9041e05c2d1e3ff73b5
btrfs: fix lost error handling when looking up extended ref on log replay

During log replay, when processing inode references, if we get an error
when looking up for an extended reference at __add_inode_ref(), we ignore
it and proceed, returning success (0) if no other error happens after the
lookup. This is obviously wrong because in case an extended reference
exists and it encodes some name not in the log, we need to unlink it,
otherwise the filesystem state will not match the state it had after the
last fsync.

So just make __add_inode_ref() return an error it gets from the extended
reference lookup.

Fixes: b60c4f34cab4e6 ("btrfs: extended inode refs")
CC: stable@vger.kernel.org # 4.9+
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/tree-log.c