BC=$(which bc 2> /dev/null) || BC=
-# Some tests are not relevant or functional when testing XFS realtime
-# subvolumes along with the rtinherit=1 mkfs option. In these cases,
-# this test will opt-out of the test.
-_require_no_rtinherit()
-{
- [ "$FSTYP" = "xfs" ] && echo "$MKFS_OPTIONS" |
- egrep -q "rtinherit([^=]|=1|$)" && \
- _notrun "rtinherit mkfs option is not supported by this test."
-}
-
_require_math()
{
if [ -z "$BC" ]; then
local params="$*"
local last_index=$(( $# - 1 ))
- #get mount point to handle dmapi mtpt option correctly
[ $last_index -gt 0 ] && shift $last_index
local fs_escaped=$1
- echo $params | sed -e 's/dmapi/dmi/' \
- | $PERL_PROG -ne "s#mtpt=[^,|^\n|^\s]*#mtpt=$fs_escaped\1\2#; print;"
+ echo $params | \
+ $PERL_PROG -ne "s#mtpt=[^,|^\n|^\s]*#mtpt=$fs_escaped\1\2#; print;"
}
[ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ] && \
options="-l $SCRATCH_LOGDEV"
- xfs_metadump $options "$@" $SCRATCH_DEV $dumpfile
+ $XFS_METADUMP_PROG $options "$@" $SCRATCH_DEV $dumpfile
}
_setup_large_ext4_fs()
case $FSTYP in
xfs)
if echo "$MKFS_OPTIONS" | egrep -q "b?size="; then
- MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r "s/(b?size=)[0-9]+/\1$blocksize/")
+ MKFS_OPTIONS=$(echo "$MKFS_OPTIONS" | sed -r "s/(b?size=)[0-9]+k?/\1$blocksize/")
else
MKFS_OPTIONS+=" -b size=$blocksize"
fi
[ $devsize -lt $1 ] && _notrun "scratch dev too small"
}
+# require a scratch dev of a minimum size (in kb) and should not be checked
+# post test
+_require_scratch_size_nocheck()
+{
+ [ $# -eq 1 ] || _fail "_require_scratch_size: expected size param"
+
+ _require_scratch_nocheck
+ local devsize=`_get_device_size $SCRATCH_DEV`
+ [ $devsize -lt $1 ] && _notrun "scratch dev too small"
+}
+
+# require scratch fs which supports >16T of filesystem size.
+_require_scratch_16T_support()
+{
+ case $FSTYP in
+ ext2|ext3|f2fs)
+ _notrun "$FSTYP doesn't support >16T filesystem"
+ ;;
+ ext4)
+ _scratch_mkfs >> $seqres.full 2>&1
+ _scratch_mount
+ local blocksize=$(_get_block_size $SCRATCH_MNT)
+ if [ $blocksize -lt 4096 ]; then
+ _notrun "This test requires >16T fs support"
+ fi
+ _scratch_unmount
+ ;;
+ *)
+ ;;
+ esac
+}
# this test needs a test partition - check we're ok & mount it
#
_require_sane_bdev_flush $SCRATCH_DEV
_require_command "$DMSETUP_PROG" dmsetup
- _normalize_mount_options | egrep -q "dax(=always| |$)"
+ _normalize_mount_options | egrep -q "dax(=always| |$)" || \
+ test -e "/sys/block/$(_short_dev $SCRATCH_DEV)/dax"
if [ $? -eq 0 ]; then
case $target in
stripe|linear|log-writes)
# Minimum size for mkswap is 10 pages
_format_swapfile "$SCRATCH_MNT/swap" $(($(get_page_size) * 10))
- if ! swapon "$SCRATCH_MNT/swap" >/dev/null 2>&1; then
- _scratch_unmount
- _notrun "swapfiles are not supported"
- fi
+ # ext* and xfs have supported all variants of swap files since their
+ # introduction, so swapon should not fail.
+ case "$FSTYP" in
+ ext2|ext3|ext4|xfs)
+ if ! swapon "$SCRATCH_MNT/swap" >/dev/null 2>&1; then
+ _scratch_unmount
+ _fail "swapon failed for $FSTYP"
+ fi
+ ;;
+ *)
+ if ! swapon "$SCRATCH_MNT/swap" >/dev/null 2>&1; then
+ _scratch_unmount
+ _notrun "swapfiles are not supported"
+ fi
+ ;;
+ esac
swapoff "$SCRATCH_MNT/swap" >/dev/null 2>&1
_scratch_unmount
local exp_s_dax=$2
local attributes=$($XFS_IO_PROG -c 'statx -r' $target | awk '/stat.attributes / { print $3 }')
+
+ # The original attribute bit value, STATX_ATTR_DAX (0x2000), conflicted
+ # with STATX_ATTR_MOUNT_ROOT. Therefore, STATX_ATTR_DAX was changed to
+ # 0x00200000.
+ #
+ # Because DAX tests do not run on root mounts, STATX_ATTR_MOUNT_ROOT
+ # should always be 0. Check for the old flag and fail the test if that
+ # occurs.
+
+ if [ $(( attributes & 0x2000 )) -ne 0 ]; then
+ echo "$target has an unexpected STATX_ATTR_MOUNT_ROOT flag set"
+ echo "which used to be STATX_ATTR_DAX"
+ echo " This test should not be running on the root inode..."
+ echo " Does the kernel have the following patch?"
+ echo " 72d1249e2ffd uapi: fix statx attribute value overlap for DAX & MOUNT_ROOT"
+ fi
+
if [ $exp_s_dax -eq 0 ]; then
- (( attributes & 0x2000 )) && echo "$target has unexpected S_DAX flag"
+ (( attributes & 0x00200000 )) && echo "$target has unexpected S_DAX flag"
else
- (( attributes & 0x2000 )) || echo "$target doesn't have expected S_DAX flag"
+ (( attributes & 0x00200000 )) || echo "$target doesn't have expected S_DAX flag"
fi
}
{
_exclude_scratch_mount_option "noatime"
case $FSTYP in
- nfs|cifs)
+ nfs|cifs|virtiofs)
_notrun "atime related mount options have no effect on $FSTYP"
;;
esac