summaryrefslogtreecommitdiffstats
path: root/test/lib
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2011-06-30 09:15:53 +0000
committerAlasdair Kergon <agk@redhat.com>2011-06-30 09:15:53 +0000
commit181b1f9fecf9693ce767e6b3321a8e2a1c74a9da (patch)
treede943d8774ee738d5726f652d9a4e3ceedc2bf63 /test/lib
parente21ef74f11d00a9ebdbb6601a19c3febca87f982 (diff)
downloadlvm2-181b1f9fecf9693ce767e6b3321a8e2a1c74a9da.tar.gz
lvm2-181b1f9fecf9693ce767e6b3321a8e2a1c74a9da.tar.xz
lvm2-181b1f9fecf9693ce767e6b3321a8e2a1c74a9da.zip
teardown stray filesystems too
Diffstat (limited to 'test/lib')
-rw-r--r--test/lib/aux.sh61
1 files changed, 37 insertions, 24 deletions
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
index 0e4c9088..5f3232df 100644
--- a/test/lib/aux.sh
+++ b/test/lib/aux.sh
@@ -90,34 +90,47 @@ teardown_devs() {
rm -f DEVICES # devs is set in prepare_devs()
rm -f LOOP
- # Try to remove test devices
- # resume any linears to be sure we do not deadlock
- STRAY_DEVS=$(dmsetup table | grep linear | sed 's/:.*//' | grep $COMMON_PREFIX | cut -d' ' -f 1)
- for dm in $STRAY_DEVS ; do
- # FIXME: only those really suspended
- dmsetup resume $dm 2>/dev/null
- done
-
- # Now try to remove devices
- finish=0
- while [ $finish -eq 0 ] ; do
- finish=1
+ # Attempt to remove any loop devices that failed to get torn down if earlier tests aborted
+ test -n "$COMMON_PREFIX" && {
+ # Resume any linears to be sure we do not deadlock
STRAY_DEVS=$(dmsetup table | sed 's/:.*//' | grep $COMMON_PREFIX | cut -d' ' -f 1)
for dm in $STRAY_DEVS ; do
- echo "Trying to remove stalled $dm"
- dmsetup remove $dm 2>/dev/null
- # Sucessful remove means repeat the loop once more
- [ $? -eq 0 ] && finish=0
+ # FIXME: only those really suspended
+ echo dmsetup resume $dm
+ dmsetup resume $dm || true
done
- done
- # Remove any loop devices that failed to get torn down if earlier tests aborted
- STRAY_LOOPS=`losetup -a | grep $COMMON_PREFIX | cut -d: -f1`
- if test -n "$STRAY_LOOPS"; then
- echo "Removing stray loop devices containing $COMMON_PREFIX:"
- losetup -a | grep $COMMON_PREFIX
- losetup -d $STRAY_LOOPS 2>/dev/null || true
- fi
+ STRAY_MOUNTS=`mount | grep $COMMON_PREFIX | cut -d\ -f1`
+ if test -n "$STRAY_MOUNTS"; then
+ echo "Removing stray mounted devices containing $COMMON_PREFIX:"
+ mount | grep $COMMON_PREFIX
+ umount -fl $STRAY_MOUNTS || true
+ sleep 2
+ fi
+
+ init_udev_transaction
+ NUM_REMAINING_DEVS=999
+ while NUM_DEVS=`dmsetup table | grep ^$COMMON_PREFIX | wc -l` && \
+ test $NUM_DEVS -lt $NUM_REMAINING_DEVS -a $NUM_DEVS -ne 0; do
+ echo "Removing $NUM_DEVS stray mapped devices with names beginning with $COMMON_PREFIX:"
+ STRAY_DEVS=$(dmsetup table | sed 's/:.*//' | grep $COMMON_PREFIX | cut -d' ' -f 1)
+ dmsetup info -c | grep ^$COMMON_PREFIX
+ for dm in $STRAY_DEVS ; do
+ echo dmsetup remove $dm
+ dmsetup remove $dm || true
+ done
+ NUM_REMAINING_DEVS=$NUM_DEVS
+ done
+ finish_udev_transaction
+ udev_wait
+
+ STRAY_LOOPS=`losetup -a | grep $COMMON_PREFIX | cut -d: -f1`
+ if test -n "$STRAY_LOOPS"; then
+ echo "Removing stray loop devices containing $COMMON_PREFIX:"
+ losetup -a | grep $COMMON_PREFIX
+ losetup -d $STRAY_LOOPS || true
+ fi
+ }
}
teardown() {