]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
tests: Ensure that loopback devices and zfs devices are cleaned up
authorGlenn Washburn <development@efficientek.com>
Sun, 6 Feb 2022 22:00:12 +0000 (16:00 -0600)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 26 Apr 2022 13:40:10 +0000 (15:40 +0200)
ZFS file systems are not unmounted using umount, but instead by exporting
them. So export the ZFS file system that has the same label as the one that
was created during the test, if such one exists. This is required to delete
the loopback device that uses the ZFS image file. Otherwise the added code
to delete all loopback devices setup during the test run will never be able
to finish because the loopback device can not be deleted while in use.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
tests/util/grub-fs-tester.in

index a8eb0fd03cc509ab66a30966dac3fc74d1cc91b5..3c1d712ded7d7e5d49e9d080c7e078671893b038 100644 (file)
@@ -15,10 +15,27 @@ tempdir=`mktemp -d "${TMPDIR:-/tmp}/${0##*/}.$(date '+%Y%m%d%H%M%S%N').${fs}.XXX
 XORRISOFS_CHARSET="-input-charset UTF-8 -output-charset UTF-8"
 
 MOUNTS=
+LODEVICES=
 cleanup() {
+    if [ -n "$fs" -a -z "${fs##*zfs*}" -a -n "$FSLABEL" ]; then
+       zpool list "$FSLABEL" 2>/dev/null &&
+       while ! zpool export "$FSLABEL" ; do
+           sleep 1;
+       done
+    fi
+
     for i in $MOUNTS; do
        umount "$i" || :
     done
+
+    for lodev in $LODEVICES; do
+       local i=600
+       while losetup -l -O NAME | grep -q "^$lodev\$"; do
+           losetup -d "$lodev" || sleep 1
+           [ "$((i--))" = "0" ] && break
+       done
+    done
+    return 0
 }
 trap cleanup EXIT INT
 # This is for bash, dash and ash do not recognize ERR