]> git.ipfire.org Git - thirdparty/linux.git/commit
btrfs: scrub: fix a return value overwrite in scrub_stripe()
authorQu Wenruo <wqu@suse.com>
Wed, 14 Jun 2023 06:49:35 +0000 (14:49 +0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 14 Jun 2023 16:30:30 +0000 (18:30 +0200)
commitb50f2d048ecf1512ff85128ea4153bceb0e60590
treea51ed8bd7c4196fc7297b00a90674cf0677940bd
parent745806fb4554f334e6406fa82b328562aa48f08f
btrfs: scrub: fix a return value overwrite in scrub_stripe()

[RETURN VALUE OVERWRITE]
Inside scrub_stripe(), we would submit all the remaining stripes after
iterating all extents.

But since flush_scrub_stripes() can return error, we need to avoid
overwriting the existing @ret if there is any error.

However the existing check is doing the wrong check:

ret2 = flush_scrub_stripes();
if (!ret2)
ret = ret2;

This would overwrite the existing @ret to 0 as long as the final flush
detects no critical errors.

[FIX]
We should check @ret other than @ret2 in that case.

Fixes: 8eb3dd17eadd ("btrfs: dev-replace: error out if we have unrepaired metadata error during")
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/scrub.c