mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
btrfs: abort transaction during log replay if walk_log_tree() failed
commit 2a5898c4aac67494c2f0f7fe38373c95c371c930 upstream. If we failed walking a log tree during replay, we have a missing transaction abort to prevent committing a transaction where we didn't fully replay all the changes from a log tree and therefore can leave the respective subvolume tree in some inconsistent state. So add the missing transaction abort. CC: stable@vger.kernel.org # 6.1+ 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
ec5bfcfb6e
commit
e02bdb2233
@@ -7300,11 +7300,14 @@ again:
|
||||
|
||||
wc.replay_dest->log_root = log;
|
||||
ret = btrfs_record_root_in_trans(trans, wc.replay_dest);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
/* The loop needs to continue due to the root refs */
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
else
|
||||
} else {
|
||||
ret = walk_log_tree(trans, log, &wc);
|
||||
if (ret)
|
||||
btrfs_abort_transaction(trans, ret);
|
||||
}
|
||||
|
||||
if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) {
|
||||
ret = fixup_inode_link_counts(trans, wc.replay_dest,
|
||||
|
||||
Reference in New Issue
Block a user