mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
xfs: don't assert when XFS_SCRUB_TYPE_HEALTHY scans return corruption
XFS_SCRUB_TYPE_HEALTHY is a synthentic scrub type so that xfs_scrub can
tell the kernel "Hey, I finished a scan and saw no problems" and have
the kernel forget that it saw indirect evidence of corruption.
Unfortunately, as LOLLM points out, it's possible for the health system
to record a new corruption just before xfs_scrub gets to
XFS_SCRUB_TYPE_HEALTHY. In this case, the existing logic doesn't return
early and instead wanders into unknown regions of type_to_health_flag
and trips the assert because HEALTHY doesn't have a group assignment.
Fix the logic so that we always return early for a HEALTHY scrub type,
even if we decide not to call xchk_mark_all_healthy.
Cc: stable@vger.kernel.org # v6.9
Fixes: a1f3e0cca4 ("xfs: update health status if we get a clean bill of health")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Assisted-by: LOLLM # finding obvious bugs
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
parent
5b644229bd
commit
afbccf99f7
|
|
@ -202,9 +202,9 @@ xchk_update_health(
|
|||
* there's no sick flag defined for it, so we branch here ahead of the
|
||||
* mask check.
|
||||
*/
|
||||
if (sc->sm->sm_type == XFS_SCRUB_TYPE_HEALTHY &&
|
||||
!(sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)) {
|
||||
xchk_mark_all_healthy(sc->mp);
|
||||
if (sc->sm->sm_type == XFS_SCRUB_TYPE_HEALTHY) {
|
||||
if (!(sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
|
||||
xchk_mark_all_healthy(sc->mp);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user