]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
tests: consolidate rmmod scsi_debug
authorRuediger Meier <ruediger.meier@ga-group.nl>
Fri, 21 Oct 2016 11:01:55 +0000 (13:01 +0200)
committerRuediger Meier <ruediger.meier@ga-group.nl>
Fri, 21 Oct 2016 13:08:49 +0000 (15:08 +0200)
 - auto cleanup on test exit
 - Add smart timeout: Newer openSUSE systems on OBS failed to rmmod
   almost always. udevadm settle does not seem to have any affect.
 - now tests will fail if rmmod fails

Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
24 files changed:
tests/functions.sh
tests/ts/blkid/mbr-wholedisk
tests/ts/blkid/md-raid1-part
tests/ts/eject/umount
tests/ts/fdisk/align-512-4K
tests/ts/fdisk/align-512-4K-63
tests/ts/fdisk/align-512-4K-md
tests/ts/fdisk/align-512-512-topology
tests/ts/libmount/context
tests/ts/libmount/context-py
tests/ts/libmount/context-utab
tests/ts/libmount/context-utab-py
tests/ts/libmount/tabfiles-tags
tests/ts/libmount/tabfiles-tags-py
tests/ts/losetup/losetup-blkdev
tests/ts/minix/mkfs
tests/ts/mount/umount-alltargets
tests/ts/mount/umount-recursive
tests/ts/partx/partx
tests/ts/sfdisk/dos
tests/ts/sfdisk/gpt
tests/ts/sfdisk/movedata
tests/ts/sfdisk/resize
tests/ts/wipefs/wipefs

index 609cedffde6953361432ff0b95840d5aa32c9c51..fe3ff5751eadf0300c44562e8064a2d0957ab857 100644 (file)
@@ -463,6 +463,8 @@ function ts_cleanup_on_exit {
                ts_device_deinit "$dev"
        done
        unset TS_LOOP_DEVS
+
+       ts_scsi_debug_rmmod
 }
 
 function ts_image_md5sum {
@@ -644,13 +646,10 @@ function ts_scsi_debug_init {
                || ts_skip "missing scsi_debug module (dry-run)"
 
        # skip if still in use or removal of modules not supported at all
+       # We don't want a slow timeout here so we don't use ts_scsi_debug_rmmod!
        modprobe -r scsi_debug &>/dev/null \
                || ts_skip "cannot remove scsi_debug module (rmmod)"
 
-       # TODO validate that all devices are gone, add function ts_scsi_debug_rmmod
-       # to be used by the tests too. Tests which produce non-removable scsi
-       # devices should fail!
-
        modprobe -b scsi_debug "$@" &>/dev/null \
                || ts_skip "cannot load scsi_debug module (modprobe)"
 
@@ -671,7 +670,46 @@ function ts_scsi_debug_init {
        TS_DEVICE="/dev/${devname}"
 
        # TODO validate that device is really up, for now just a warning on stderr
-       test -b $TS_DEVICE || echo "warning: scsi_debug device is still down"
+       test -b $TS_DEVICE || echo "warning: scsi_debug device is still down" >&2
+}
+
+# automatically called once in ts_cleanup_on_exit()
+function ts_scsi_debug_rmmod {
+       local err=1
+       local t
+       local lastmsg
+
+       # Return early most importantly in case we are not root or the module does
+       # not exist at all.
+       [ $UID -eq 0 ] || return 0
+       [ -n "$TS_DEVICE" ] || return 0
+       lsmod | grep -q "^scsi_debug " || return 0
+
+       udevadm settle
+
+       # wait for successful rmmod if udevadm settle does not work
+       for t in 0 0.02 0.05 0.1 1; do
+               sleep $t
+               lastmsg="$(modprobe -r scsi_debug 2>&1)" && err=0 && break
+       done
+
+       if [ "$err" = "1" ]; then
+               ts_log "rmmod failed: '$lastmsg'"
+               ts_log "timeout removing scsi_debug module (rmmod)"
+               return 1
+       fi
+       if lsmod | grep -q "^scsi_debug "; then
+               ts_log "BUG! scsi_debug still loaded"
+               return 1
+       fi
+
+       # TODO Do we need to validate that all devices are gone?
+       udevadm settle
+       test -b "$TS_DEVICE" && echo "warning: scsi_debug device is still up" >&2
+
+       # TODO unset TS_DEVICE, check that nobody uses it later, e.g. ts_fdisk_clean
+
+       return 0
 }
 
 function ts_resolve_host {
index 98c9df1b516c8ec35a7b6624c59d2f537776fff2..239592e56ac367c89bc59e81a3565e6d00f57be1 100755 (executable)
@@ -39,5 +39,4 @@ udevadm settle
 $TS_CMD_BLKID -p -o udev ${TS_DEVICE} >> $TS_OUTPUT
 ts_finalize_subtest
 
-rmmod scsi_debug
 ts_finalize
index ce3a687c73c0b190ec7db5e0e4033e286a49978b..9f1276186c33df9b75f86e0d4182e262ebb52b5c 100755 (executable)
@@ -79,8 +79,6 @@ $TS_CMD_BLKID -p -o udev ${TS_DEVICE}2 2>&1 | sort >> $TS_OUTPUT
 
 mdadm -q -S ${MD_DEVICE} >> $TS_OUTPUT 2>&1
 
-udevadm settle
-rmmod scsi_debug
 
 ts_fdisk_clean $TS_DEVICE
 # substitue UUIDs and major/minor number before comparison
index a6e3acff3bbefb5081c2a2df50964c15ec865ad6..9faab27e61a3724f2d81e4b95f3d23de8c3507a9 100755 (executable)
@@ -55,8 +55,7 @@ EOF
 }
 
 function deinit_device {
-       udevadm settle
-       rmmod scsi_debug
+       ts_scsi_debug_rmmod
 }
 
 
index bdfb5cecaca65263990ecb09f3830f01e847812e..c312e34f14ad085e90c87d96645fd95055eed7ce 100755 (executable)
@@ -73,8 +73,6 @@ udevadm settle
 ts_log "Alignment offsets:"
 cat /sys/block/${DEVNAME}/${DEVNAME}{1,2,3,4,5,6,7}/alignment_offset >> $TS_OUTPUT 2>&1
 
-rmmod scsi_debug
-
 ts_fdisk_clean $TS_DEVICE
 
 ts_finalize
index e259b5a0a7588c7a3b024a19681b7a745e1c5184..b84780bda621651317139ca4880198b63eed3967 100755 (executable)
@@ -73,7 +73,6 @@ udevadm settle
 ts_log "Alignment offsets:"
 cat /sys/block/${DEVNAME}/${DEVNAME}{1,2,3,4,5,6,7}/alignment_offset >> $TS_OUTPUT 2>&1
 
-rmmod scsi_debug
 
 ts_fdisk_clean $TS_DEVICE
 
index 11a67699bf8098045b52e676bc31a4c9c8d02880..04c3df68ec1c747dd3664988f78be64ca8c922e7 100755 (executable)
@@ -87,9 +87,6 @@ cat /sys/block/${MD_DEVNAME}/${MD_DEVNAME}p{1,2}/alignment_offset >> $TS_OUTPUT
 
 mdadm -q -S ${MD_DEVICE} >> $TS_OUTPUT 2>&1
 
-udevadm settle
-rmmod scsi_debug
-
 ts_fdisk_clean $TS_DEVICE
 ts_fdisk_clean $MD_DEVICE
 
index d291e2f9783b7809ff4170d2ea45143733f7bcb2..802ea61c2bc27cc2f9c49e3587a43dfd8cb23835 100755 (executable)
@@ -73,8 +73,6 @@ udevadm settle
 ts_log "Alignment offsets:"
 cat /sys/block/${DEVNAME}/${DEVNAME}{1,2,3,4,5,6,7}/alignment_offset >> $TS_OUTPUT 2>&1
 
-rmmod scsi_debug
-
 ts_fdisk_clean $TS_DEVICE
 
 ts_finalize
index bcb9534e8d90094860c981d7a1d533c3ebc5f666..ebb24411029a9d5989d260880866b810477dbe8b 100755 (executable)
@@ -58,7 +58,6 @@ udevadm settle
 
 grep -q $DEVNAME /proc/partitions
 if [ $? -ne 0 ]; then
-       rmmod scsi_debug
        ts_skip "no partition!"
 fi
 
@@ -157,5 +156,4 @@ $TS_CMD_UMOUNT $TS_NOEXIST
 rmdir $TS_NOEXIST
 
 ts_log "...done."
-rmmod scsi_debug
 ts_finalize
index 66b2eec52a41b03d9954ea5c611a563aada3055a..b4e22b4000ba8626a7f6748a0c8a3ca1a767fedc 100755 (executable)
@@ -60,7 +60,6 @@ udevadm settle
 
 grep -q $DEVNAME /proc/partitions
 if [ $? -ne 0 ]; then
-       rmmod scsi_debug
        ts_skip "no partition!"
 fi
 
@@ -159,5 +158,4 @@ $TS_CMD_UMOUNT $TS_NOEXIST
 rmdir $TS_NOEXIST
 
 ts_log "...done."
-rmmod scsi_debug
 ts_finalize
index a50cf67b2fa85a460baa4b373189f9fc9edcac38..e9b1cdf9a4c882782e8c4ce46d78587925cae3cd 100755 (executable)
@@ -46,7 +46,6 @@ udevadm settle
 
 grep -q $DEVNAME /proc/partitions
 if [ $? -ne 0 ]; then
-       rmmod scsi_debug
        ts_skip "no partition!"
 fi
 
@@ -130,5 +129,4 @@ if type "mkfs.btrfs" &>/dev/null && mkfs.btrfs --version &>/dev/null; then
 fi
 
 ts_log "...done."
-rmmod scsi_debug
 ts_finalize
index 7994f4fc129a1564f81f399730e3996b87eb2a0c..94c957d9155e7eda30eb99a22b441f583ff14cb6 100755 (executable)
@@ -47,7 +47,6 @@ udevadm settle
 
 grep -q $DEVNAME /proc/partitions
 if [ $? -ne 0 ]; then
-       rmmod scsi_debug
        ts_skip "no partition!"
 fi
 
@@ -131,5 +130,4 @@ if type "mkfs.btrfs" &>/dev/null && mkfs.btrfs --version &>/dev/null; then
 fi
 
 ts_log "...done."
-rmmod scsi_debug
 ts_finalize
index 598b11cf623ffd56faee9e183baa6678b76bc2f9..f986dbc371a671f287559ec9ab83ec727a34f77f 100755 (executable)
@@ -83,6 +83,4 @@ sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
 sed -i -e 's/source: .*//g' $TS_OUTPUT         # devname is generated, remove it
 ts_finalize_subtest
 
-udevadm settle
-rmmod scsi_debug
 ts_finalize
index 4fd2a2695c304aa7fd816ca6453c14dcf37dc7d8..c1ad596bfd7c088ab6a79886598721e2bd664ab2 100755 (executable)
@@ -87,6 +87,4 @@ sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
 sed -i -e 's/source: .*//g' $TS_OUTPUT         # devname is generated, remove it
 ts_finalize_subtest
 
-udevadm settle
-rmmod scsi_debug
 ts_finalize
index 4e0f95de2dc45344ea5737f2e6653b3f55164e4c..54693beb993b4a241bbd5cdcda399a5134187ff8 100755 (executable)
@@ -78,8 +78,4 @@ udevadm settle
 $TS_CMD_LOSETUP -d $LODEV
 ts_finalize_subtest
 
-udevadm settle
-
-rmmod scsi_debug
-
 ts_finalize
index 9d213328d35d7ca29260cd4a92a71ba34fae9612..4fc6ad3e038dd17f2adc18bf42c86eb781c76743 100755 (executable)
@@ -51,7 +51,5 @@ mkfs_and_mount_minix 'v2c14' '-2 -n 14'
 mkfs_and_mount_minix 'v2c30' '-2 -n 30'
 mkfs_and_mount_minix 'v3c60' '-3 -n 60'
 
-udevadm settle
-rmmod scsi_debug &>/dev/null
 ts_finalize
 
index 53073023a660ba76b9d1899a74710dcfb4e29ae6..687229a879787c2f17a65b40c8f1b0bbf642d990 100755 (executable)
@@ -118,9 +118,5 @@ $TS_CMD_UMOUNT --recursive --all-targets ${TS_DEVICE}1 >> $TS_OUTPUT 2>&1
 [ $? == 0 ] || ts_log "umount failed"
 ts_finalize_subtest
 
-udevadm settle
-rmmod scsi_debug >> $TS_OUTPUT 2>&1
-[ $? == 0 ] || ts_die "device busy (umount failed?)"
-
 ts_log "Success"
 ts_finalize
index 29669a88d0d69fcd6cf6328069e8d5389a57ae38..85708554fbda1cd1914dd95c637a1c57037c6ed3 100755 (executable)
@@ -90,10 +90,6 @@ $TS_CMD_MOUNT --bind $TS_MOUNTPOINT/mntB/mntC $TS_MOUNTPOINT/bindC
 $TS_CMD_UMOUNT --recursive $TS_MOUNTPOINT >> $TS_OUTPUT 2>&1
 [ $? == 0 ] || ts_die "umount failed"
 
-udevadm settle
-rmmod scsi_debug >> $TS_OUTPUT 2>&1
-[ $? == 0 ] || ts_die "device busy (umount failed?)"
-
 ts_log "Success"
 ts_finalize
 
index 37990d8be1df4aa7fd04153f9a154f3e27059c1a..5b84afe243668e9aac9663a9acf4747ec18fa2e1 100755 (executable)
@@ -59,8 +59,7 @@ $TS_CMD_DELPART ${TS_DEVICE} 1
 [ "$?" == 0 ] && echo OK >> $TS_OUTPUT 2>&1 || ts_die "Unable to remove partition" >> $TS_OUTPUT 2>&1
 ts_finalize_subtest
 
-udevadm settle
-rmmod scsi_debug &> /dev/null
+ts_scsi_debug_rmmod
 
 # set global variable TS_DEVICE
 ts_scsi_debug_init dev_size_mb=50 num_parts=$PARTS
@@ -135,6 +134,4 @@ $TS_CMD_PARTX -a --nr 0 $TS_DEVICE
 [ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null | wc -l) -eq $PARTS ] && echo "partitions added" >> $TS_OUTPUT 2>&1 || echo "Failed to add $TS_DEVICE partitions" >> $TS_OUTPUT 2>&1
 ts_finalize_subtest
 
-udevadm settle
-rmmod scsi_debug
 ts_finalize
index 592d6e41196c1d8ac9aa57964f2b9dd18b7eadfe..692a717250299495a2ca29c406bf350f0ec5a069 100755 (executable)
@@ -151,6 +151,4 @@ ts_fdisk_clean $TS_DEVICE
 udevadm settle
 ts_finalize_subtest
 
-
-rmmod scsi_debug
 ts_finalize
index 9656bf964213bdaa2c3b25afe0272b484684c9cd..b1f36a881bac59382192c21bf13c38c5805e4f4d 100755 (executable)
@@ -165,5 +165,4 @@ udevadm settle
 ts_finalize_subtest
 
 
-rmmod scsi_debug
 ts_finalize
index 64c7371a4ca4a059c3e230a4ff756f3e6be867f2..299d6cce8080d588652b035fcb546d767c853969 100755 (executable)
@@ -72,5 +72,4 @@ checksum ${TS_DEVICE}1
 ts_finalize_subtest
 
 
-rmmod scsi_debug
 ts_finalize
index 8bc3484da5c02797783147c43edf42527993cb72..ff58e2de9becd3baa068b24788d9736778dfe4a0 100755 (executable)
@@ -122,5 +122,4 @@ test_label_resize dos
 # GPT
 test_label_resize gpt
 
-rmmod scsi_debug
 ts_finalize
index 2a296df78d55888d038bd45de330fae2fe1190c9..69163629978b744f5d363dd8e815aad4e824e427 100755 (executable)
@@ -30,5 +30,4 @@ $TS_CMD_WIPEFS -a ${TS_DEVICE} > $TS_OUTDIR/out 2>/dev/null
 # check for output
 [ -s $TS_OUTDIR/out ] && echo "OK" &> $TS_OUTPUT || exit 1
 
-rmmod scsi_debug &>/dev/null
 ts_finalize