dmflakey: support error_writes feature for dm-flakey
[xfstests-dev.git] / common / dmflakey
index e34fce85caa80cb6d9620abf4c3832ce419b83da..06eee378d0a272f15e33f2ea9f4ed835b18b06d8 100644 (file)
@@ -20,6 +20,7 @@
 
 FLAKEY_ALLOW_WRITES=0
 FLAKEY_DROP_WRITES=1
+FLAKEY_ERROR_WRITES=2
 
 echo $MOUNT_OPTIONS | grep -q dax
 if [ $? -eq 0 ]; then
@@ -32,6 +33,7 @@ _init_flakey()
        FLAKEY_DEV=/dev/mapper/flakey-test
        FLAKEY_TABLE="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 180 0"
        FLAKEY_TABLE_DROP="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 0 180 1 drop_writes"
+       FLAKEY_TABLE_ERROR="0 $BLK_DEV_SIZE flakey $SCRATCH_DEV 0 0 180 1 error_writes"
        $DMSETUP_PROG create flakey-test --table "$FLAKEY_TABLE" || \
                _fatal "failed to create flakey device"
        $DMSETUP_PROG mknodes > /dev/null 2>&1
@@ -67,9 +69,9 @@ _cleanup_flakey()
 # table, so it simulates power failure.
 _load_flakey_table()
 {
-
        table="$FLAKEY_TABLE"
        [ $1 -eq $FLAKEY_DROP_WRITES ] && table="$FLAKEY_TABLE_DROP"
+       [ $1 -eq $FLAKEY_ERROR_WRITES ] && table="$FLAKEY_TABLE_ERROR"
 
        suspend_opt="--nolockfs"
        [ $# -gt 1 ] && [ $2 -eq 1 ] && suspend_opt=""
@@ -101,3 +103,23 @@ _flakey_drop_and_remount()
        _load_flakey_table $FLAKEY_ALLOW_WRITES
        _mount_flakey
 }
+
+_require_flakey_with_error_writes()
+{
+       local SIZE
+       local TABLE
+       local NAME=flakey-test
+
+       _require_dm_target flakey
+
+       SIZE=`blockdev --getsz $SCRATCH_DEV`
+       TABLE="0 $SIZE flakey $SCRATCH_DEV 0 0 180 1 error_writes"
+
+       $DMSETUP_PROG create $NAME --table "$TABLE" >/dev/null 2>&1
+       if [ $? -ne 0 ]; then
+               _notrun "This test requires error_writes feature in dm-flakey"
+       fi
+       $DMSETUP_PROG mknodes >/dev/null 2>&1
+
+       _cleanup_flakey
+}