From 181b1f9fecf9693ce767e6b3321a8e2a1c74a9da Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Thu, 30 Jun 2011 09:15:53 +0000 Subject: [PATCH] teardown stray filesystems too --- WHATS_NEW | 1 + test/lib/aux.sh | 61 ++++++++++++++++++++++++++++++------------------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index f04264ebc..7fe55187c 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.86 - ================================= + Teardown any stray devices with $COMMON_PREFIX during test runs. Reinstate correct permissions when creating mirrors. [2.02.85] Append 'm' attribute to pv_attr for missing PVs. Annotate CLVMD_CMD_SYNC_NAMES in decode_cmd. diff --git a/test/lib/aux.sh b/test/lib/aux.sh index 0e4c90881..5f3232dff 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() {