#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2015 Oracle, Inc. All Rights Reserved.
+#
# FS QA Test No. 083
#
# Create and populate an XFS filesystem, fuzz the metadata, then see how
# the kernel reacts, how xfs_repair fares in fixing the mess, and then
# try more kernel accesses to see if it really fixed things.
#
-#-----------------------------------------------------------------------
-# Copyright (c) 2015 Oracle, Inc. All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it would be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-#-----------------------------------------------------------------------
-#
-
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
# real QA test starts here
_supported_fs xfs
-_supported_os Linux
_require_scratch
#_require_xfs_crc # checksum not required, but you probably want it anyway...
FSCK_LOG="${tmp}-fuzz-${fsck_pass}.log"
echo "++ fsck pass ${fsck_pass}" > "${FSCK_LOG}"
- _scratch_xfs_repair >> "${FSCK_LOG}" 2>&1
+ _repair_scratch_fs >> "${FSCK_LOG}" 2>&1
res=$?
if [ "${res}" -eq 0 ]; then
echo "++ allegedly fixed, reverify" >> "${FSCK_LOG}"
_scratch_populate >> $seqres.full
echo "+ check fs" >> $seqres.full
-_scratch_xfs_repair >> $seqres.full 2>&1 || _fail "should pass initial fsck"
+_repair_scratch_fs >> $seqres.full 2>&1 || _fail "should pass initial fsck"
echo "++ corrupt image" >> $seqres.full
-xfs_db -x -c blockget -c "blocktrash ${FUZZ_ARGS}" "${SCRATCH_DEV}" >> $seqres.full 2>&1
+_scratch_xfs_db -x -c blockget -c "blocktrash ${FUZZ_ARGS}" >> $seqres.full 2>&1
echo "++ mount image" >> $seqres.full
_try_scratch_mount >> $seqres.full 2>&1
echo "+ fsck loop returns ${fsck_loop_ret}" >> $seqres.full
echo "++ check fs for round 2" >> $seqres.full
-_scratch_xfs_repair >> $seqres.full 2>&1
+_repair_scratch_fs >> $seqres.full 2>&1
ROUND2_LOG="${tmp}-round2-${fsck_pass}.log"
echo "++ mount image (2)" >> $ROUND2_LOG
cat "$ROUND2_LOG" >> $seqres.full
echo "++ check fs (2)" >> $seqres.full
-_scratch_xfs_repair >> $seqres.full 2>&1
+_repair_scratch_fs >> $seqres.full 2>&1
egrep -q '(did not fix|makes no progress)' $seqres.full && echo "xfs_repair failed" | tee -a $seqres.full
if [ "$(wc -l < "$ROUND2_LOG")" -ne 8 ]; then