Imported Upstream version 2.3.7
[platform/upstream/cryptsetup.git] / tests / device-test
index 0898b45..617f16a 100755 (executable)
@@ -17,7 +17,7 @@ cleanup() {
            umount -f $MNT_DIR 2>/dev/null
            rmdir $MNT_DIR 2>/dev/null
        fi
-       sleep 2
+       rmmod scsi_debug 2>/dev/null
 }
 
 fail()
@@ -36,8 +36,19 @@ skip()
        exit 77
 }
 
+add_device() {
+       modprobe scsi_debug $@ delay=0
+       [ $? -ne 0 ] && skip "This kernel seems to not support proper scsi_debug module."
+
+       sleep 1
+       SCSI_DEV=$(grep -l -e scsi_debug /sys/block/*/device/model | cut -f4 -d /)
+
+       [ -b "/dev/$SCSI_DEV" ] || fail "Cannot find $SCSI_DEV."
+}
+
 function dm_crypt_features()
 {
+       modprobe dm-crypt || fail "dm-crypt failed to load"
        VER_STR=$(dmsetup targets | grep crypt | cut -f2 -dv)
        [ -z "$VER_STR" ] && fail "Failed to parse dm-crypt version."
 
@@ -61,6 +72,9 @@ function dm_crypt_features()
        if [ $VER_MIN -gt 18 -o \( $VER_MIN -eq 18 -a $VER_PTC -ge 1 \) ]; then
                 test -d /proc/sys/kernel/keys && DM_KEYRING=1
        fi
+
+       [ $VER_MIN -lt 22 ] && return
+       DM_PERF_NO_WORKQUEUE=1
 }
 
 function dm_crypt_keyring_support()
@@ -119,11 +133,12 @@ if [ -z "$DM_PERF_CPU" ]; then
        echo "TEST SKIPPED: dmcrypt options not available"
        SKIP_COUNT=$((SKIP_COUNT+1))
 else
-       # plain
+       echo -n "PLAIN: same_cpu_crypt submit_from_cpus "
        echo -e "$PWD1" | $CRYPTSETUP open -q --type plain --hash sha256 $DEV $DEV_NAME --perf-same_cpu_crypt --perf-submit_from_crypt_cpus || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q submit_from_crypt_cpus || fail
        $CRYPTSETUP close $DEV_NAME || fail
+       echo -n "allow_discards "
        echo -e "$PWD1" | $CRYPTSETUP open -q --type plain --hash sha256 $DEV $DEV_NAME --perf-same_cpu_crypt --allow-discards || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q discards || fail
@@ -141,12 +156,21 @@ else
        $CRYPTSETUP status $DEV_NAME | grep -q discards && fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt && fail
        echo -e "$PWD1" | $CRYPTSETUP refresh --hash sha256 $DEV $DEV_NAME2 2>/dev/null && fail
+       if [ -n "$DM_PERF_NO_WORKQUEUE" ]; then
+               echo -n "no_read_workqueue no_write_workqueue"
+               echo -e "$PWD1" | $CRYPTSETUP refresh --hash sha256 -q $DEV_NAME --perf-no_read_workqueue --perf-no_write_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_read_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_write_workqueue || fail
+       fi
        $CRYPTSETUP close $DEV_NAME || fail
-       # LUKS
+       echo
+
+       echo -n "LUKS: same_cpu_crypt submit_from_cpus "
        echo -e "$PWD1" | $CRYPTSETUP open --type luks1 $DEV $DEV_NAME --perf-same_cpu_crypt --perf-submit_from_crypt_cpus || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q submit_from_crypt_cpus || fail
        $CRYPTSETUP close $DEV_NAME || fail
+       echo -n "allow_discards "
        echo -e "$PWD1" | $CRYPTSETUP open --type luks1 $DEV $DEV_NAME --perf-same_cpu_crypt --allow-discards || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q discards || fail
@@ -162,9 +186,17 @@ else
        $CRYPTSETUP status $DEV_NAME | grep -q discards && fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt && fail
        echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME2 2>/dev/null && fail
+       if [ -n "$DM_PERF_NO_WORKQUEUE" ]; then
+               echo -n "no_read_workqueue no_write_workqueue"
+               echo -e "$PWD1" | $CRYPTSETUP refresh $DEV_NAME  --perf-no_read_workqueue --perf-no_write_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_read_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_write_workqueue || fail
+       fi
        $CRYPTSETUP close $DEV_NAME || fail
+       echo
 
        format luks2
+       echo -n "LUKS2: same_cpu_crypt submit_from_cpus "
        echo -e "$PWD1" | $CRYPTSETUP open $DEV $DEV_NAME --perf-same_cpu_crypt --perf-submit_from_crypt_cpus --persistent || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q submit_from_crypt_cpus || fail
@@ -174,6 +206,7 @@ else
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q submit_from_crypt_cpus || fail
        $CRYPTSETUP close $DEV_NAME || fail
+       echo -n "allow_discards [persistent flags] "
        echo -e "$PWD1" | $CRYPTSETUP open $DEV $DEV_NAME --perf-same_cpu_crypt --allow-discards --persistent || fail
        $CRYPTSETUP status $DEV_NAME | grep -q same_cpu_crypt || fail
        $CRYPTSETUP status $DEV_NAME | grep -q discards || fail
@@ -211,11 +244,23 @@ else
        echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME --disable-keyring || fail
        $CRYPTSETUP status $DEV_NAME | grep -q keyring && fail
        if [ -n "$DM_KEYRING" ]; then
+               echo -n "keyring "
                echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME || fail
                $CRYPTSETUP status $DEV_NAME | grep -q keyring || fail
        fi
+       if [ -n "$DM_PERF_NO_WORKQUEUE" ]; then
+               echo -n "no_read_workqueue no_write_workqueue"
+               echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME --perf-no_read_workqueue --perf-no_write_workqueue --persistent || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_read_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_write_workqueue || fail
+               $CRYPTSETUP close $DEV_NAME || fail
+               echo -e "$PWD1" | $CRYPTSETUP open $DEV $DEV_NAME || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_read_workqueue || fail
+               $CRYPTSETUP status $DEV_NAME | grep -q no_write_workqueue || fail
+       fi
        echo -e "$PWD1" | $CRYPTSETUP refresh $DEV $DEV_NAME2 2>/dev/null && fail
        $CRYPTSETUP close $DEV_NAME || fail
+       echo
 fi
 
 echo "[3] Kernel dmcrypt sector size options"
@@ -262,4 +307,22 @@ else
        echo
 fi
 
+echo "[4] Disappeared device test:"
+KEY="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
+for F in LUKS1 LUKS2 BITLK TCRYPT; do
+       echo -n "$F"
+       add_device dev_size_mb=1 sector_size=512 num_tgts=1 lbpu=1
+       # Fake CRYPT UUID to force code to parse type-specific path
+       dmsetup create $DEV_NAME --uuid CRYPT-$F-$DEV_NAME --table "0 1024 crypt aes-xts-plain64 $KEY 16 /dev/$SCSI_DEV 16"
+       $CRYPTSETUP status $DEV_NAME >/dev/null 2>&1 || fail
+       echo 1 > /sys/block/$SCSI_DEV/device/delete
+       udevadm settle >/dev/null 2>&1
+       $CRYPTSETUP status $DEV_NAME >/dev/null 2>&1 || fail
+       dmsetup remove $DEV_NAME --retry || fail
+       rmmod scsi_debug
+       echo -n "[OK] "
+done
+echo
+
 cleanup
+exit 0