then
                try="$try $seqnum"
                n_try=`expr $n_try + 1`
-               _check_test_fs
+               test -f ${RESULT_DIR}/require_test && _check_test_fs
+               rm -f ${RESULT_DIR}/require_test
                test -f ${RESULT_DIR}/require_scratch && _check_scratch_fs
                rm -f ${RESULT_DIR}/require_scratch
            fi
 
     touch ${RESULT_DIR}/require_scratch
 }
 
+# this test needs a test partition - check we're ok & unmount it
+#
+_require_test()
+{
+    case "$FSTYP" in
+       nfs*)
+                 _notrun "requires a test device"
+                ;;
+       tmpfs)
+               if [ -z "$TEST_DEV" -o ! -d "$TEST_DIR" ];
+               then
+                   _notrun "this test requires a valid \$TEST_DIR and unique $TEST_DEV"
+               fi
+               ;;
+       *)
+                if [ -z "$TEST_DEV" -o "`_is_block_dev $TEST_DEV`" = "" ]
+                then
+                    _notrun "this test requires a valid \$TEST_DEV"
+                fi
+                if [ "`_is_block_dev $SCRATCH_DEV`" = "`_is_block_dev $TEST_DEV`" ]
+                then
+                    _notrun "this test requires a valid \$TEST_DEV"
+                fi
+               if [ ! -d "$TEST_DIR" ]
+               then
+                    _notrun "this test requires a valid \$TEST_DIR"
+               fi
+                ;;
+    esac
+
+    # mounted?
+    if _mount | grep -q $TEST_DEV
+    then
+        # if it's mounted, make sure its on $TEST_DIR
+        if ! _mount | grep $TEST_DEV | grep -q $TEST_DIR
+        then
+            echo "\$TEST_DEV is mounted but not on \$TEST_DIR - aborting"
+            exit 1
+        fi
+    else
+       out=`_mount_or_remount_rw "$MOUNT_OPTIONS" $TEST_DEV $TEST_DIR`
+       if [ $? -ne 1 ]; then
+               echo $out
+               exit 1
+       fi
+    fi
+    touch ${RESULT_DIR}/require_test
+}
+
 # this test needs a logdev
 #
 _require_logdev()
 
 # Modify as appropriate.
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 # if error
 exit
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 
 _scratch_mkfs > /dev/null 2>&1
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _require_fssum
 
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 
 _scratch_mkfs > /dev/null 2>&1
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 
 rm -f $seqres.full
 echo "Silence is golden"
 
 
 _require_xfs_io_command "fiemap"
 _require_cp_reflink
+_require_test
 
 TESTDIR1=$TEST_DIR/test-$seq
 rm -rf $TESTDIR1
 
 
 _require_xfs_io_command "fiemap"
 _require_cp_reflink
+_require_test
 
 TESTDIR1=$TEST_DIR/test-$seq
 rm -rf $TESTDIR1
 
 
 _require_xfs_io_command "fiemap"
 _require_cp_reflink
+_require_test
 
 rm -f $seqres.full
 
 
 _supported_fs btrfs
 _supported_os Linux
 
+_require_test
 _require_scratch
 _require_cp_reflink
 
 
 _supported_fs btrfs
 _supported_os Linux
 
+_require_test
 _require_scratch
 _require_cp_reflink
 
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _need_to_be_root
 
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _require_fssum
 _need_to_be_root
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _require_fssum
 _require_xfs_io_command "fiemap"
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _require_btrfs "property"
 _need_to_be_root
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _require_fssum
 _need_to_be_root
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _require_fssum
 _need_to_be_root
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _require_fssum
 _require_attrs
 
 # real QA test starts here
 _supported_fs btrfs
 _supported_os Linux
+_require_test
 _require_scratch
 _need_to_be_root
 
 
 _supported_fs ext4
 _supported_os Linux
 _require_xfs_io_command "fzero"
+_require_test
 
 testfile=$TEST_DIR/001.$$
 
 
 _supported_fs ext4
 _supported_os Linux
 _require_xfs_io_command "falloc"
+_require_test
 
 # Real QA test starts here.
 rm -f $seqres.full
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 verbose=true
 verify=$here/verify_fill
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 echo "Silence is goodness ..."
 
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "flink"
 
 testfile="${TEST_DIR}/tst-tmpfile-flink"
 
 
 # real QA test starts here
 _supported_fs generic
+_require_test
 
 # IRIX UDF does not support symlinks
 if [ $FSTYP == 'udf' ]; then
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 mkdir $TEST_DIR/permname.$$
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 status=1 # default failure 
 sourcefile=$tmp.nametest
 
 _supported_os Linux
 
 _require_xfs_io_command "fzero"
+_require_test
 
 testfile=$TEST_DIR/008.$$
 
 
 # real QA test starts here
 _supported_os Linux
 _require_xfs_io_command "fzero"
+_require_test
 
 testfile=$TEST_DIR/009.$$
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 rm -f $seqres.full
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 out=$TEST_DIR/dirstress.$$
 
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "fpunch"
 _require_xfs_io_command "falloc"
 _require_xfs_io_command "fiemap"
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 rm -f $seqres.full
 echo "brevity is wit..."
 
 _supported_fs generic
 _supported_os IRIX Linux
 
+_require_test
 _require_sparse_files
 
 # ensure EOF preallocation doesn't massively extend the runtime of this test
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "fpunch"
 _require_xfs_io_command "falloc"
 _require_xfs_io_command "fiemap"
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_attrs
 
 rm -f $seqres.full
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "fpunch"
 _require_xfs_io_command "falloc"
 _require_xfs_io_command "fiemap"
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "fpunch"
 _require_xfs_io_command "falloc"
 _require_xfs_io_command "fiemap"
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _requires_renameat2
 
 # real QA test starts here
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _requires_renameat2
 
 rename_dir=$TEST_DIR/$$
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _requires_renameat2
 
 rename_dir=$TEST_DIR/$$
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 _require_scratch
 _need_to_be_root
 _acl_setup_ids
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 echo "Silence is golden"
 
 
 _supported_fs generic
 _supported_os IRIX Linux
 
+_require_test
 _require_attrs
 
 FSSTRESS_ARGS=`_scale_fsstress_args \
 
 
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 #
 # set params
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 size10=`expr 10 \* 1024 \* 1024`       # 10 megabytes
 filelen=$size10
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 path=$TEST_DIR/t_access
 src/t_access_root $path | tee $seqres.full | _filter
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 rm -f $seqres.full
 [ "X$TEST_DIR" = "X" ] && exit 1
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 rm -f $seqres.full
 
 
 _supported_fs generic
 _supported_os IRIX
 
+_require_test
 _require_attrs
 
 [ -x $runas ] || _notrun "$runas executable not found"
 
 _supported_fs generic
 _supported_os IRIX
 
+_require_test
 _require_scratch
 _require_attrs
 
 
 _supported_fs generic
 _supported_os IRIX
 
+_require_test
 _acl_setup_ids
 _require_acls
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 # Use _populate_fs() in common/rc to create a directory structure.
 TEMP_DIR=/tmp
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 [ -x $here/ltp/aio-stress ] || \
        _notrun "fsx not built with AIO for this platform"
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 [ -x $here/ltp/aio-stress ] || _notrun "aio-stress not built for this platform"
 
 
 _supported_fs generic
 _supported_os Linux IRIX
 
+_require_test
 _require_user
 
 my_test_subdir=$TEST_DIR/123subdir
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_scratch
 _scratch_mkfs >/dev/null 2>&1
 _scratch_mount
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_user
 
 TESTDIR=$TEST_DIR/ftrunc
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 QA_FS_PERMS=$here/src/fs_perms
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 _fsx_lite_nommap
 _fsx_lite_mmap
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 TESTFILE=$TEST_DIR/lock_file
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux IRIX
+_require_test
 
 echo "Buffered writer, buffered reader"
 $XFS_IO_PROG -f -d -c 'pwrite -b 64k 0 512m' $TEST_DIR/io_test > /dev/null
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 rm -f $TEST_DIR/null
 mknod $TEST_DIR/null c 1 3
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 #delay=150
 #delay=75
 #delay=60
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_user
 _need_to_be_root
 
 
 _supported_fs generic
 _supported_os Linux
 _require_aiodio aiodio_sparse2
+_require_test
 
 echo "Silence is golden."
 
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 _run_aiodio aio-dio-extend-stat
 
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 rm -f $seqres.full
 
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 _run_aiodio aio-dio-invalidate-readahead
 
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 _run_aiodio aio-dio-subblock-eof-read
 
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 _run_aiodio aio-free-ring-with-bogus-nr-pages
 
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 _run_aiodio aio-io-setup-with-nonwritable-context-pointer
 
 
 
 rm -f $seqres.full
 
+_require_test
 _require_xfs_io_command "falloc"
 
 # check there's enough freespace on $TEST_DIR ... (1GiB + 1MiB)
 
 _supported_fs generic
 # only Linux supports fallocate
 _supported_os Linux
+_require_test
 
 [ -n "$XFS_IO_PROG" ] || _notrun "xfs_io executable not found"
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 testfile=$TEST_DIR/tst.mmap
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 echo "Silence is golden."
 
 
 _supported_fs generic
 # only Linux supports fallocate
 _supported_os Linux
+_require_test
 
 [ -n "$XFS_IO_PROG" ] || _notrun "xfs_io executable not found"
 
 
 _supported_fs generic
 # only Linux supports fallocate
 _supported_os Linux
+_require_test
 
 rm -f $TEST_DIR/ouch*
 
 
 _supported_fs generic
 # only Linux supports fallocate
 _supported_os Linux
+_require_test
 
 [ -x $runas ] || _notrun "$runas executable not found"
 
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_sparse_files
 _require_aiodio aio-dio-hole-filling-race
 
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_sparse_files
 _require_aiodio aiodio_sparse2
 
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 [ "$DBENCH_PROG" = "" ] && _notrun "dbench not found"
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 dir=$TEST_DIR/test-mv
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 file=$TEST_DIR/mmap-writev
 
 
 # Modify as appropriate.
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 testfile=$TEST_DIR/$seq.$$
 
 
 # Modify as appropriate.
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 TESTFILE=$TEST_DIR/test_file
 TEST_PROG=$here/src/pwrite_mmap_blocked
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 echo "Feel the serenity."
 
 
 _supported_fs generic 
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "fpunch"
 _require_xfs_io_command "falloc"
 _require_xfs_io_command "fiemap"
 
 _require_xfs_io_command "fpunch"
 _require_scratch
 _require_user
+_require_test
 
 testfile=$TEST_DIR/256.$$
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 mkdir $TEST_DIR/ttt
 for n in {1..168}; do
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 TESTFILE=$TEST_DIR/timestamp-test.txt
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 rm -f $seqres.full
 
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_seek_data_hole
 
 BASE_TEST_FILE=$TEST_DIR/seek_sanity_testfile
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_seek_data_hole
 
 src=$TEST_DIR/seek_copy_testfile
 
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_test
 
 DEVNULL=$SCRATCH_MNT/devnull
 DEVZERO=$SCRATCH_MNT/devzero
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 rm -f $seqres.full
 echo "Silence is golden"
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 echo "Silence is golden"
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 dmesg -c > /dev/null
 
 
 # real QA test starts here
 _supported_fs generic
 _supported_os IRIX Linux
+_require_test
 
 testfile=$TEST_DIR/testfile.$seq
 
 
 
 # real QA test starts here
 _supported_fs generic
+_require_test
 _require_acls
 _require_user
 _need_to_be_root
 
 # Modify as appropriate.
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 rm -f $seqres.full
 
 
 _supported_fs generic
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "fpunch"
 _require_xfs_io_command "fiemap"
 
 
 
 _supported_fs generic
 _supported_os Linux
+_require_test
 
 _require_aiodio aio-last-ref-held-by-io
 
 
 # real QA test starts here
 _supported_fs xfs udf
 _supported_os Linux
+_require_test
 
 [ -x $runas ] || _notrun "$runas executable not found"
 
 
 
 _supported_fs ext4 xfs
 _supported_os Linux
+_require_test
 _require_loop
 _require_fstrim
 _require_xfs_io_command "fiemap"
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 [ -f core ] && rm -f core
 [ -f core ] && echo "Warning: can't nuke existing core file!"
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 rm -f $seqres.full
 
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 rm -f $seqres.full
 
 
 _supported_fs xfs
 _supported_os Linux
 
+_require_test
 _require_scratch
 
 echo "*** get uuid"
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 src/fault $TEST_DIR || exit
 
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 _my_stat_filter()
 {
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os Linux
+_require_test
 
 [ "$USE_EXTERNAL" = yes ] && _notrun "Cannot xfs_copy with external devices"
 [ -n "$XFS_COPY_PROG" ] || _notrun "xfs_copy binary not yet installed"
 
 _supported_fs xfs
 _supported_os Linux
 
+_require_test
 # Must have loop device
 _require_loop
 
 
 # Apparently should be able to work on IRIX,
 # but not at the moment.
 _supported_os Linux
+_require_test
 
 quiet=-q
 clean=-c
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 if [ $HOSTOS == "IRIX" ]; then 
     if uname -R | grep -iq debug; then 
 
 _supported_fs xfs
 _supported_os Linux IRIX
 
+_require_test
 _require_xfs_quota
 
 dir=$SCRATCH_MNT/project
 
 # Modify as appropriate.
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 testfile=$TEST_DIR/file.$seq
 
 
 # Modify as appropriate.
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 # io tests 
 testfile=$TEST_DIR/file.$seq
 
 _supported_fs xfs
 _supported_os Linux
 
+_require_test
 _require_user
 
 echo "Preparing subtree"
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os Linux
+_require_test
 
 bitsperlong=`src/feature -w`
 if [ "$bitsperlong" -ne 32 ]; then
 
 # Modify as appropriate.
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 _require_loop
 
 bitsperlong=`src/feature -w`
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os Linux
+_require_test
 
 [ "$XFS_FSR_PROG" = "" ] && _notrun "xfs_fsr not found"
 
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os Linux
+_require_test
 
 TDIR="${TEST_DIR}/t_holes"
 NFILES="10"
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os Linux
+_require_test
 
 _test_io_zero()
 {
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os Linux
+_require_test
 _require_loop
 
 LOOP_DEV=$TEST_DIR/$seq.fs
 
 _supported_fs xfs 
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "fpunch"
 _require_xfs_io_command "fiemap"
 
 
 . ./common/rc
 . ./common/filter
 
+_require_test
 _require_scratch
 
 # real QA test starts here
 
 # real QA test starts here
 _supported_fs xfs
 _supported_os Linux
+_require_test
 _require_loop
 _require_math
 
 
 _supported_fs xfs
 _supported_os Linux
 
+_require_test
 _require_xfs_io_command "zero"
 
 testfile=$TEST_DIR/290.$$
 
 # Modify as appropriate.
 _supported_fs xfs
 _supported_os IRIX Linux
+_require_test
 
 fsfile=$TEST_DIR/fsfile.$seq