_dump_err2()
{
_err_msg="$*"
- >2& echo "$_err_msg"
+ >&2 echo "$_err_msg"
}
_log_err()
local opts="$1"
if test -n "$opts"; then
- mount -o "remount,$opts" $SCRATCH_MNT
+ _try_scratch_mount "-o remount,$opts"
fi
}
fi
}
+# Return a file path that can be used to shut down the scratch filesystem.
+# Caller should _require_scratch_shutdown before using this.
+_scratch_shutdown_handle()
+{
+ if [ $FSTYP = "overlay" ]; then
+ echo $OVL_BASE_SCRATCH_MNT
+ else
+ echo $SCRATCH_MNT
+ fi
+}
+
_test_mount()
{
if [ "$FSTYP" == "overlay" ]; then
return $res
;;
*)
- # Let's hope fsck -y suffices...
- fsck -t $FSTYP -y $SCRATCH_DEV 2>&1
+ local dev=$SCRATCH_DEV
+ local fstyp=$FSTYP
+ if [ $FSTYP = "overlay" -a -n "$OVL_BASE_SCRATCH_DEV" ]; then
+ _repair_overlay_scratch_fs
+ # Fall through to repair base fs
+ dev=$OVL_BASE_SCRATCH_DEV
+ fstyp=$OVL_BASE_FSTYP
+ $UMOUNT_PROG $OVL_BASE_SCRATCH_MNT
+ fi
+ # Let's hope fsck -y suffices...
+ fsck -t $fstyp -y $dev 2>&1
local res=$?
case $res in
- 0|1|2)
+ $FSCK_OK|$FSCK_NONDESTRUCT|$FSCK_REBOOT)
res=0
;;
*)
fi
case "$fstyp" in
- btrfs|ext4|xfs|ceph|cifs|f2fs|gfs2|nfs*|ocfs2|tmpfs)
+ btrfs|ext4|xfs|ceph|cifs|f2fs|gfs2|ocfs2|tmpfs)
return 0
;;
+ nfs*)
+ # NFSv2 and NFSv3 only support default behavior of SEEK_HOLE,
+ # while NFSv4 supports non-default behavior
+ local nfsvers=`_df_device $TEST_DEV | $AWK_PROG '{ print $2 }'`
+ [ "$nfsvers" = "nfs4" ]
+ return $?
+ ;;
overlay)
if [ ! -z $OVL_BASE_FSTYP -a $OVL_BASE_FSTYP != "overlay" ]; then
_fstyp_has_non_default_seek_data_hole $OVL_BASE_FSTYP
_dmesg_since_test_start | egrep -q "$1"
}
+# Default filter for dmesg scanning.
+# Ignore lockdep complaining about its own bugginess when scanning dmesg
+# output, because we shouldn't be failing filesystem tests on account of
+# lockdep.
+_check_dmesg_filter()
+{
+ egrep -v -e "BUG: MAX_LOCKDEP_CHAIN_HLOCKS too low" \
+ -e "BUG: MAX_STACK_TRACE_ENTRIES too low"
+}
+
# check dmesg log for WARNING/Oops/etc.
_check_dmesg()
{
# default filter is a simple cat command, caller could provide a
# customized filter and pass the name through the first argument, to
# filter out intentional WARNINGs or Oopses
- local filter=${1:-cat}
+ local filter=${1:-_check_dmesg_filter}
_dmesg_since_test_start | $filter >$seqres.dmesg
egrep -q -e "kernel BUG at" \
rm -f $file
}
+_try_wipe_scratch_devs()
+{
+ test -x "$WIPEFS_PROG" || return 0
+
+ for dev in $SCRATCH_DEV_POOL $SCRATCH_DEV $SCRATCH_LOGDEV $SCRATCH_RTDEV; do
+ test -b $dev && $WIPEFS_PROG -a $dev
+ done
+}
+
+# Only run this on xfs if xfs_scrub is available and has the unicode checker
+_check_xfs_scrub_does_unicode() {
+ [ "${FSTYP}" == "xfs" ] || return 1
+
+ local mount="$1"
+ local dev="$2"
+
+ _supports_xfs_scrub "${mount}" "${dev}" || return 1
+
+ # We only care if xfs_scrub has unicode string support...
+ if ! type ldd > /dev/null 2>&1 || \
+ ! ldd "${XFS_SCRUB_PROG}" | grep -q libicui18n; then
+ return 1
+ fi
+
+ return 0
+}
+
init_rc
################################################################################