set -e
trap 'exit 127' 0
+adt_readconfig_needlock=y
+. ${ADT_XENLVM_SHARE:=/usr/share/autopkgtest/xenlvm}/justconfig
+while test $# -gt $nonoptargs; do shift; done
-. ./config
-./cleanup
+if ! test -f "$adt_play/good"; then
+ echo >&2 'testbed not in good state'
+ exit 127
+fi
-modprobe dm-snapshot ||:
+${ADT_XENLVM_SHARE}/cleanup >/dev/null
-#dd if=/dev/zero of=/dev/$lvcowdata bs=512 count=$adt_filesys_cowchunk status=noxfer
+modprobe dm-snapshot >/dev/null 2>&1 ||:
-bdsize=$(blockdev --getsize $lvbase)
-dmsetup create $nsnap <<END
-0 $bdsize snapshot $lvbase $lvcowdata n $adt_filesys_cowchunk
+for fs in fs swap; do
+ swap=${fs#fs}; eval "
+ bdsize=\$(blockdev --getsize \$lvm_baselv_${swap}namepath)
+ dmsetup create \$adt_devmapper_${swap}cowdev <<END
+0 \$bdsize snapshot \$lvm_baselv_${swap}namepath \$lvm_cowdata_${swap}namepath n \$adt_${fs}_cowchunk
END
-mkdir -p /dev/${pfx}_fs
-ln -s $lvsnap $lvfsptr
+ mkdir -p \$lvm_${fs}link_dirpath
+ ln -s \$lvm_${swap}snapdev \$lvm_${fs}link_ptr
+ "
+done
-xm restore $play/xen-save
-xm mem-set $xmname $adt_testbed_ram
+xm restore $adt_play/xen-save
+xm mem-set $adt_xmname $adt_testbed_ram
udevsettle
+unset ADT_LOCKED
+
set +e
-"$@"
+case $# in
+0) debian_chroot="<with-adtxenlvm_$adt_nominum>$debian_chroot" $SHELL -i ;;
+*) "$@" ;;
+esac
rc=$?
set -e
-xm destroy $xmname
-dmsetup remove $nsnap
+xm destroy $adt_xmname
+
+sleep 1
+# ... this helps races where xm destroy leaves network interfaces etc.
+# still enabled
+
+sleep=0
+while true; do
+ if dmsetup remove $adt_devmapper_cowdev; then break; fi
+ if [ $sleep -gt 3 ]; then fail "dmsetup remove kept failing"; fi
+ sleep $sleep
+ sleep=$(( $sleep + 1 ))
+done
trap '' 0
exit $rc