generic: fsx IO_URING soak tests
[xfstests-dev.git] / common / rc
index 807a1f6ca225c5b5fbbde1af7a62f4e1f55ff929..e6a5b07b82be34843f5489c731e10f1c3c505f9e 100644 (file)
--- a/common/rc
+++ b/common/rc
@@ -31,19 +31,13 @@ _math()
 
 dd()
 {
-   if [ "$HOSTOS" == "Linux" ]
-   then        
        command dd --help 2>&1 | grep noxfer >/dev/null
-       
        if [ "$?" -eq 0 ]
            then
                command dd status=noxfer $@
            else
                command dd $@
-       fi
-   else
-       command dd $@
-   fi
+       fi
 }
 
 # Prints the md5 checksum of a given file
@@ -144,6 +138,7 @@ case "$FSTYP" in
     9p)
         ;;
     ceph)
+        . ./common/ceph
         ;;
     glusterfs)
         ;;
@@ -941,110 +936,115 @@ _available_memory_bytes()
 # _scratch_mkfs_sized <size in bytes> [optional blocksize]
 _scratch_mkfs_sized()
 {
-    local fssize=$1
-    local blocksize=$2
-    local def_blksz
-
-    case $FSTYP in
-    xfs)
-       def_blksz=`echo $MKFS_OPTIONS|sed -rn 's/.*-b ?size= ?+([0-9]+).*/\1/p'`
-       ;;
-    ext2|ext3|ext4|ext4dev|udf|btrfs|reiser4|ocfs2|reiserfs)
-       def_blksz=`echo $MKFS_OPTIONS| sed -rn 's/.*-b ?+([0-9]+).*/\1/p'`
-       ;;
-    jfs)
-       def_blksz=4096
-       ;;
-    esac
-
-    [ -n "$def_blksz" ] && blocksize=$def_blksz
-    [ -z "$blocksize" ] && blocksize=4096
+       local fssize=$1
+       local blocksize=$2
+       local def_blksz
 
+       case $FSTYP in
+       xfs)
+               def_blksz=`echo $MKFS_OPTIONS | sed -rn 's/.*-b ?size= ?+([0-9]+).*/\1/p'`
+               ;;
+       ext2|ext3|ext4|ext4dev|udf|btrfs|reiser4|ocfs2|reiserfs)
+               def_blksz=`echo $MKFS_OPTIONS | sed -rn 's/.*-b ?+([0-9]+).*/\1/p'`
+               ;;
+       jfs)
+               def_blksz=4096
+               ;;
+       esac
 
-    local re='^[0-9]+$'
-    if ! [[ $fssize =~ $re ]] ; then
-        _notrun "error: _scratch_mkfs_sized: fs size \"$fssize\" not an integer."
-    fi
-    if ! [[ $blocksize =~ $re ]] ; then
-        _notrun "error: _scratch_mkfs_sized: block size \"$blocksize\" not an integer."
-    fi
+       [ -n "$def_blksz" ] && blocksize=$def_blksz
+       [ -z "$blocksize" ] && blocksize=4096
 
-    local blocks=`expr $fssize / $blocksize`
+       local re='^[0-9]+$'
+       if ! [[ $fssize =~ $re ]] ; then
+               _notrun "error: _scratch_mkfs_sized: fs size \"$fssize\" not an integer."
+       fi
+       if ! [[ $blocksize =~ $re ]] ; then
+               _notrun "error: _scratch_mkfs_sized: block size \"$blocksize\" not an integer."
+       fi
 
-    if [ "$HOSTOS" == "Linux" -a -b "$SCRATCH_DEV" ]; then
-       local devsize=`blockdev --getsize64 $SCRATCH_DEV`
-       [ "$fssize" -gt "$devsize" ] && _notrun "Scratch device too small"
-    fi
+       local blocks=`expr $fssize / $blocksize`
 
-    case $FSTYP in
-    xfs)
-       # don't override MKFS_OPTIONS that set a block size.
-       echo $MKFS_OPTIONS |egrep -q "b?size="
-       if [ $? -eq 0 ]; then
-               _scratch_mkfs_xfs -d size=$fssize
-       else
-               _scratch_mkfs_xfs -d size=$fssize -b size=$blocksize
+       if [ -b "$SCRATCH_DEV" ]; then
+               local devsize=`blockdev --getsize64 $SCRATCH_DEV`
+               [ "$fssize" -gt "$devsize" ] && _notrun "Scratch device too small"
        fi
-       ;;
-    ext2|ext3|ext4|ext4dev)
-       ${MKFS_PROG}.$FSTYP -F $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks
-       ;;
-    gfs2)
-       # mkfs.gfs2 doesn't automatically shrink journal files on small
-       # filesystems, so the journal files may end up being bigger than the
-       # filesystem, which will cause mkfs.gfs2 to fail.  Until that's fixed,
-       # shrink the journal size to at most one eigth of the filesystem and at
-       # least 8 MiB, the minimum size allowed.
-       local min_journal_size=8
-       local default_journal_size=128
-       if (( fssize/8 / (1024*1024) < default_journal_size )); then
-           local journal_size=$(( fssize/8 / (1024*1024) ))
-           (( journal_size >= min_journal_size )) || journal_size=$min_journal_size
-           MKFS_OPTIONS="-J $journal_size $MKFS_OPTIONS"
-       fi
-       ${MKFS_PROG}.$FSTYP $MKFS_OPTIONS -O -b $blocksize $SCRATCH_DEV $blocks
-       ;;
-    ocfs2)
-       yes | ${MKFS_PROG}.$FSTYP -F $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks
-       ;;
-    udf)
-       $MKFS_UDF_PROG $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks
-       ;;
-    btrfs)
-       local mixed_opt=
-       # minimum size that's needed without the mixed option.
-       # Ref: btrfs-prog: btrfs_min_dev_size()
-       # Non mixed mode is also the default option.
-       (( fssize < $((256 * 1024 *1024)) )) && mixed_opt='--mixed'
-       $MKFS_BTRFS_PROG $MKFS_OPTIONS $mixed_opt -b $fssize $SCRATCH_DEV
-       ;;
-    jfs)
-       ${MKFS_PROG}.$FSTYP $MKFS_OPTIONS $SCRATCH_DEV $blocks
-       ;;
-    reiserfs)
-       ${MKFS_PROG}.$FSTYP $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks
-       ;;
-    reiser4)
-       # mkfs.resier4 requires size in KB as input for creating filesystem
-       $MKFS_REISER4_PROG $MKFS_OPTIONS -y -b $blocksize $SCRATCH_DEV \
-                          `expr $fssize / 1024`
-       ;;
-    f2fs)
-       # mkfs.f2fs requires # of sectors as an input for the size
-       local sector_size=`blockdev --getss $SCRATCH_DEV`
-       $MKFS_F2FS_PROG $MKFS_OPTIONS $SCRATCH_DEV `expr $fssize / $sector_size`
-       ;;
-    tmpfs)
-       local free_mem=`_free_memory_bytes`
-       if [ "$free_mem" -lt "$fssize" ] ; then
-          _notrun "Not enough memory ($free_mem) for tmpfs with $fssize bytes"
+
+       if [ "$FSTYP" = "xfs" ] && [ -b "$SCRATCH_RTDEV" ]; then
+               local rtdevsize=`blockdev --getsize64 $SCRATCH_RTDEV`
+               [ "$fssize" -gt "$rtdevsize" ] && _notrun "Scratch rt device too small"
+               rt_ops="-r size=$fssize"
        fi
-       export MOUNT_OPTIONS="-o size=$fssize $TMPFS_MOUNT_OPTIONS"
-       ;;
-    *)
-       _notrun "Filesystem $FSTYP not supported in _scratch_mkfs_sized"
-       ;;
-    esac
+
+       case $FSTYP in
+       xfs)
+               # don't override MKFS_OPTIONS that set a block size.
+               echo $MKFS_OPTIONS |egrep -q "b?size="
+               if [ $? -eq 0 ]; then
+                       _scratch_mkfs_xfs -d size=$fssize $rt_ops
+               else
+                       _scratch_mkfs_xfs -d size=$fssize $rt_ops -b size=$blocksize
+               fi
+               ;;
+       ext2|ext3|ext4|ext4dev)
+               ${MKFS_PROG}.$FSTYP -F $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks
+               ;;
+       gfs2)
+               # mkfs.gfs2 doesn't automatically shrink journal files on small
+               # filesystems, so the journal files may end up being bigger than the
+               # filesystem, which will cause mkfs.gfs2 to fail.  Until that's fixed,
+               # shrink the journal size to at most one eigth of the filesystem and at
+               # least 8 MiB, the minimum size allowed.
+               local min_journal_size=8
+               local default_journal_size=128
+               if (( fssize/8 / (1024*1024) < default_journal_size )); then
+                       local journal_size=$(( fssize/8 / (1024*1024) ))
+                       (( journal_size >= min_journal_size )) || journal_size=$min_journal_size
+                       MKFS_OPTIONS="-J $journal_size $MKFS_OPTIONS"
+               fi
+               ${MKFS_PROG}.$FSTYP $MKFS_OPTIONS -O -b $blocksize $SCRATCH_DEV $blocks
+               ;;
+       ocfs2)
+               yes | ${MKFS_PROG}.$FSTYP -F $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks
+               ;;
+       udf)
+               $MKFS_UDF_PROG $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks
+               ;;
+       btrfs)
+               local mixed_opt=
+               # minimum size that's needed without the mixed option.
+               # Ref: btrfs-prog: btrfs_min_dev_size()
+               # Non mixed mode is also the default option.
+               (( fssize < $((256 * 1024 *1024)) )) && mixed_opt='--mixed'
+               $MKFS_BTRFS_PROG $MKFS_OPTIONS $mixed_opt -b $fssize $SCRATCH_DEV
+               ;;
+       jfs)
+               ${MKFS_PROG}.$FSTYP $MKFS_OPTIONS $SCRATCH_DEV $blocks
+               ;;
+       reiserfs)
+               ${MKFS_PROG}.$FSTYP $MKFS_OPTIONS -b $blocksize $SCRATCH_DEV $blocks
+               ;;
+       reiser4)
+               # mkfs.resier4 requires size in KB as input for creating filesystem
+               $MKFS_REISER4_PROG $MKFS_OPTIONS -y -b $blocksize $SCRATCH_DEV \
+                                  `expr $fssize / 1024`
+               ;;
+       f2fs)
+               # mkfs.f2fs requires # of sectors as an input for the size
+               local sector_size=`blockdev --getss $SCRATCH_DEV`
+               $MKFS_F2FS_PROG $MKFS_OPTIONS $SCRATCH_DEV `expr $fssize / $sector_size`
+               ;;
+       tmpfs)
+               local free_mem=`_free_memory_bytes`
+               if [ "$free_mem" -lt "$fssize" ] ; then
+                  _notrun "Not enough memory ($free_mem) for tmpfs with $fssize bytes"
+               fi
+               export MOUNT_OPTIONS="-o size=$fssize $TMPFS_MOUNT_OPTIONS"
+               ;;
+       *)
+               _notrun "Filesystem $FSTYP not supported in _scratch_mkfs_sized"
+               ;;
+       esac
 }
 
 # Emulate an N-data-disk stripe w/ various stripe units
@@ -1450,24 +1450,6 @@ _supported_fs()
     _notrun "not suitable for this filesystem type: $FSTYP"
 }
 
-
-# tests whether $FSTYP is one of the supported OSes for a test
-#
-_supported_os()
-{
-    local h
-
-    for h
-    do
-       if [ "$h" = "$HOSTOS" ]
-       then
-           return
-       fi
-    done
-
-    _notrun "not suitable for this OS: $HOSTOS"
-}
-
 # check if a FS on a device is mounted
 # if so, verify that it is mounted on mount point
 # if fstype is given as argument, verify that it is also
@@ -1755,11 +1737,6 @@ _require_logdev()
 #
 _require_loop()
 {
-    if [ "$HOSTOS" != "Linux" ]
-    then
-       _notrun "This test requires linux for loopback device support"
-    fi
-
     modprobe loop >/dev/null 2>&1
     if grep loop /proc/devices >/dev/null 2>&1
     then
@@ -1773,11 +1750,6 @@ _require_loop()
 #
 _require_ext2()
 {
-    if [ "$HOSTOS" != "Linux" ]
-    then
-       _notrun "This test requires linux for ext2 filesystem support"
-    fi
-
     modprobe ext2 >/dev/null 2>&1
     if grep ext2 /proc/filesystems >/dev/null 2>&1
     then
@@ -1984,6 +1956,22 @@ _require_aiodio()
     _require_odirect
 }
 
+# this test requires that the kernel supports IO_URING
+_require_io_uring()
+{
+       $here/src/feature -R
+       case $? in
+       0)
+               ;;
+       1)
+               _notrun "kernel does not support IO_URING"
+               ;;
+       *)
+               _fail "unexpected error testing for IO_URING support"
+               ;;
+       esac
+}
+
 # this test requires that a test program exists under src/
 # $1 - command (require)
 #
@@ -2163,6 +2151,12 @@ _require_xfs_io_command()
        local testfile=$TEST_DIR/$$.xfs_io
        local testio
        case $command in
+       "lsattr")
+               # Test xfs_io lsattr support and filesystem FS_IOC_FSSETXATTR
+               # support.
+               testio=`$XFS_IO_PROG -F -f -c "lsattr $param" $testfile 2>&1`
+               param_checked="$param"
+               ;;
        "chattr")
                local testdir=$TEST_DIR/$$.attr_dir
                mkdir $TEST_DIR/$$.attr_dir
@@ -3230,7 +3224,7 @@ _check_s_dax()
        if [ $exp_s_dax -eq 0 ]; then
                (( attributes & 0x2000 )) && echo "$target has unexpected S_DAX flag"
        else
-               (( attributes & 0x2000 )) || echo "$target doen't have expected S_DAX flag"
+               (( attributes & 0x2000 )) || echo "$target doesn't have expected S_DAX flag"
        fi
 }
 
@@ -3242,7 +3236,7 @@ _check_xflag()
        if [ $exp_xflag -eq 0 ]; then
                _test_inode_flag dax $target && echo "$target has unexpected FS_XFLAG_DAX flag"
        else
-               _test_inode_flag dax $target || echo "$target doen't have expected FS_XFLAG_DAX flag"
+               _test_inode_flag dax $target || echo "$target doesn't have expected FS_XFLAG_DAX flag"
        fi
 }
 
@@ -4338,6 +4332,12 @@ _require_mknod()
        rm -f $TEST_DIR/$seq.null
 }
 
+_getcap()
+{
+       $GETCAP_PROG "$@" | _filter_getcap
+       return ${PIPESTATUS[0]}
+}
+
 init_rc
 
 ################################################################################