diff options
author | Alasdair Kergon <agk@redhat.com> | 2011-06-30 09:15:53 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2011-06-30 09:15:53 +0000 |
commit | 181b1f9fecf9693ce767e6b3321a8e2a1c74a9da (patch) | |
tree | de943d8774ee738d5726f652d9a4e3ceedc2bf63 /test/lib | |
parent | e21ef74f11d00a9ebdbb6601a19c3febca87f982 (diff) | |
download | lvm2-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.sh | 61 |
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() { |