mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
872ccc54ca
Use the error injection mechanism to test log recovery of deferred work. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Eryu Guan <eguan@redhat.com> Signed-off-by: Eryu Guan <eguan@redhat.com>
94 lines
2.5 KiB
Plaintext
94 lines
2.5 KiB
Plaintext
##/bin/bash
|
|
# Routines for injecting errors into filesystems
|
|
#-----------------------------------------------------------------------
|
|
# Copyright (c) 2016 Oracle. 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; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will 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 to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
# USA
|
|
#
|
|
# Contact information: Oracle Corporation, 500 Oracle Parkway,
|
|
# Redwood Shores, CA 94065, USA, or: http://www.oracle.com/
|
|
#-----------------------------------------------------------------------
|
|
. ./common/log
|
|
|
|
# Tests whether $FSTYP is one of the filesystems that supports error injection
|
|
_require_error_injection()
|
|
{
|
|
case "$FSTYP" in
|
|
"xfs")
|
|
grep -q 'debug 1' /proc/fs/xfs/stat || \
|
|
_notrun "XFS error injection requires CONFIG_XFS_DEBUG"
|
|
;;
|
|
*)
|
|
_notrun "Error injection not supported on filesystem type: $FSTYP"
|
|
esac
|
|
}
|
|
|
|
# Requires that xfs_io inject command knows about this error type
|
|
_require_xfs_io_error_injection()
|
|
{
|
|
type="$1"
|
|
_require_error_injection
|
|
|
|
# NOTE: We can't actually test error injection here because xfs
|
|
# hasn't always range checked the argument to xfs_errortag_add.
|
|
# We also don't want to trip an error before we're ready to deal
|
|
# with it.
|
|
|
|
$XFS_IO_PROG -x -c 'inject' $TEST_DIR | grep -q "$type" || \
|
|
_notrun "XFS error injection $type unknown."
|
|
}
|
|
|
|
# Inject an error into the test fs
|
|
_test_inject_error()
|
|
{
|
|
type="$1"
|
|
|
|
$XFS_IO_PROG -x -c "inject $type" $TEST_DIR
|
|
}
|
|
|
|
# Inject an error into the scratch fs
|
|
_scratch_inject_error()
|
|
{
|
|
type="$1"
|
|
|
|
$XFS_IO_PROG -x -c "inject $type" $SCRATCH_MNT
|
|
}
|
|
|
|
# Unmount and remount the scratch device, dumping the log
|
|
_scratch_inject_logprint()
|
|
{
|
|
local opts="$1"
|
|
|
|
if test -n "$opts"; then
|
|
opts="-o $opts"
|
|
fi
|
|
_scratch_unmount
|
|
_scratch_dump_log
|
|
_scratch_mount "$opts"
|
|
}
|
|
|
|
# Unmount and remount the test device, dumping the log
|
|
_test_inject_logprint()
|
|
{
|
|
local opts="$1"
|
|
|
|
if test -n "$opts"; then
|
|
opts="-o $opts"
|
|
fi
|
|
_test_unmount
|
|
_test_dump_log
|
|
_test_mount "$opts"
|
|
}
|