On Tue, Oct 11, 2022 at 06:45:33PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > The fs population code has the ability to save cached metadumps of > filesystems to save time when running fstests. The cached images should > be unmounted cleanly, so we never save the contents of external log > devices. > > Unfortunately, the cache restore code fails to wipe the external log > when restoring a clean image, so we end up with strange test failures > because the log doesn't match the filesystem: > > * ERROR: mismatched uuid in log > * SB : 5ffec625-d3bb-4f4e-a181-1f9efe543d9c > * log: 607bd75a-a63d-400c-8779-2139f0a3d384 > > Worse yet, xfs_repair will overwrite a filesystem's uuid with the log > uuid, which leads to corruption messages later on: > > Metadata corruption detected at 0x561f69a9a2a8, xfs_agf block 0x8/0x1000 > xfs_db: cannot init perag data (117). Continuing anyway. > > Solve this by wiping the log device when restoring. > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- Make sense, Reviewed-by: Zorro Lang <zlang@xxxxxxxxxx> > common/populate | 21 +++++++++++++++++++-- > 1 file changed, 19 insertions(+), 2 deletions(-) > > > diff --git a/common/populate b/common/populate > index b501c2fe45..0bd78e0a0a 100644 > --- a/common/populate > +++ b/common/populate > @@ -11,7 +11,12 @@ _require_populate_commands() { > _require_xfs_io_command "falloc" > _require_xfs_io_command "fpunch" > _require_test_program "punch-alternating" > - _require_command "$XFS_DB_PROG" "xfs_db" > + case "${FSTYP}" in > + "xfs") > + _require_command "$XFS_DB_PROG" "xfs_db" > + _require_command "$WIPEFS_PROG" "wipefs" > + ;; > + esac > } > > _require_xfs_db_blocktrash_z_command() { > @@ -851,7 +856,19 @@ _scratch_populate_restore_cached() { > > case "${FSTYP}" in > "xfs") > - xfs_mdrestore "${metadump}" "${SCRATCH_DEV}" && return 0 > + xfs_mdrestore "${metadump}" "${SCRATCH_DEV}" > + res=$? > + test $res -ne 0 && return $res > + > + # Cached images should have been unmounted cleanly, so if > + # there's an external log we need to wipe it and run repair to > + # format it to match this filesystem. > + if [ -n "${SCRATCH_LOGDEV}" ]; then > + $WIPEFS_PROG -a "${SCRATCH_LOGDEV}" > + _scratch_xfs_repair > + res=$? > + fi > + return $res > ;; > "ext2"|"ext3"|"ext4") > # ext4 cannot e2image external logs, so we cannot restore >