_require_sane_bdev_flush $SCRATCH_DEV
_require_command "$DMSETUP_PROG" dmsetup
+ echo $MOUNT_OPTIONS | grep -q dax
+ if [ $? -eq 0 ]; then
+ case $target in
+ stripe|linear|log-writes)
+ ;;
+ *)
+ _notrun "Cannot run tests with DAX on $target devices."
+ ;;
+ esac
+ fi
+
modprobe dm-$target >/dev/null 2>&1
$DMSETUP_PROG targets 2>&1 | grep -q ^$target
if [ $tsmin -eq -1 -a $tsmax -eq -1 ]; then
_notrun "filesystem $FSTYP timestamp bounds are unknown"
fi
+
+ # expect console warning from rw scratch mount if fs limit is near
+ if [ $tsmax -le $((1<<31)) ] && \
+ ! _check_dmesg_for "filesystem being mounted at .* supports timestamps until"
+ then
+ _notrun "Kernel does not support timestamp limits"
+ fi
}
_filesystem_timestamp_range()
_notrun "xfs_io $command $param_checked not supported on $FSTYP"
echo $testio | grep -q "Function not implemented" && \
_notrun "xfs_io $command $param_checked support is missing (missing syscall?)"
+ echo $testio | grep -q "unknown flag" && \
+ _notrun "xfs_io $command $param_checked support is missing (unknown flag)"
[ -n "$param" ] || return
if [ -z "$param_checked" ]; then
- $XFS_IO_PROG -c "help $command" | grep -q "^ $param --" || \
+ $XFS_IO_PROG -c "help $command" | grep -E -q "^ $param ([a-zA-Z_]+ )?--" || \
_notrun "xfs_io $command doesn't support $param"
else
# xfs_io could result in "command %c not supported" if it was
_require_sparse_files()
{
case $FSTYP in
- hfsplus)
+ hfsplus|exfat)
_notrun "Sparse files not supported by this filesystem type: $FSTYP"
;;
*)
{
[ -f "$DEBUGFS_MNT/fail_make_request/probability" ] \
|| _notrun "$DEBUGFS_MNT/fail_make_request \
- not found. Seems that CONFIG_FAIL_MAKE_REQUEST kernel config option not enabled"
+ not found. Seems that CONFIG_FAULT_INJECTION_DEBUG_FS kernel config option not enabled"
}
# Disable extent zeroing for ext4 on the given device
fi
case "$FSTYP" in
- ext2|vfat|msdos|udf)
+ ext2|vfat|msdos|udf|exfat)
echo "$FSTYP does not support metadata journaling"
return 1
;;
esac
shift
done
- echo $args
+ printf '%s\n' "$args"
}
#
"$@" >> $seqres.full 2>&1 || _fail "failed: '$@'"
}
-_require_test_symlinks()
+_require_symlinks()
{
local target=`mktemp -p $TEST_DIR`
local link=`mktemp -p $TEST_DIR -u`
rm -f $target $link
}
+_require_hardlinks()
+{
+ local target=`mktemp -p $TEST_DIR`
+ local link=`mktemp -p $TEST_DIR -u`
+ ln $target $link
+ if [ "$?" -ne 0 ]; then
+ rm -f $target
+ _notrun "No hardlink support"
+ fi
+ rm -f $target $link
+}
+
_require_test_fcntl_advisory_locks()
{
[ "$FSTYP" != "cifs" ] && return 0
_notrun "Require fcntl advisory locks support"
}
+_require_test_fcntl_setlease()
+{
+ _require_test_program "locktest"
+ touch $TEST_DIR/setlease_testfile
+ $here/src/locktest -t $TEST_DIR/setlease_testfile >/dev/null 2>&1
+ [ $? -eq 22 ] && _notrun "Require fcntl setlease support"
+}
+
_require_ofd_locks()
{
# Give a test run by getlk wrlck on testfile.
# return device size in kb
_get_device_size()
{
- grep `_short_dev $1` /proc/partitions | awk '{print $3}'
+ grep -w `_short_dev $1` /proc/partitions | awk '{print $3}'
}
# Make sure we actually have dmesg checking set up.
{
case "$(getconf LONG_BIT)" in
"32")
- echo $(( ($(getconf PAGE_SIZE) << ($(getconf LONG_BIT) - 1) ) - 1))
+ local ulong_max=$(getconf ULONG_MAX)
+ local page_size=$(getconf PAGE_SIZE)
+ echo $(( ulong_max * page_size ))
;;
"64")
echo 9223372036854775807
return 0
}
+# exfat timestamps start at 1980 and cannot be prior to epoch
+_require_negative_timestamps() {
+ case "$FSTYP" in
+ ceph|exfat)
+ _notrun "$FSTYP does not support negative timestamps"
+ ;;
+ esac
+}
+
+# Require the 'accton' userspace tool and CONFIG_BSD_PROCESS_ACCT=y.
+_require_bsd_process_accounting()
+{
+ _require_command "$ACCTON_PROG" accton
+ $ACCTON_PROG on &> $tmp.test_accton
+ cat $tmp.test_accton >> $seqres.full
+ if grep 'Function not implemented' $tmp.test_accton; then
+ _notrun "BSD process accounting support unavailable"
+ fi
+ $ACCTON_PROG off >> $seqres.full
+}
+
+_require_sysctl_variable()
+{
+ local name=$1
+ sysctl $name &>/dev/null || _notrun "$name sysctl unavailable"
+}
+
+_require_mknod()
+{
+ mknod $TEST_DIR/$seq.null c 1 3 \
+ || _notrun "$FSTYP does not support mknod/mkfifo"
+ rm -f $TEST_DIR/$seq.null
+}
+
init_rc
################################################################################