[ -z "$isofile" ] && exit 1
+ismounted "/run/initramfs/isoscan" && exit 1
+
mkdir -p "/run/initramfs/isoscan"
-for dev in /dev/disk/by-uuid/*; do
- mount -t auto -o ro "$dev" "/run/initramfs/isoscan" || continue
- if [ -f "/run/initramfs/isoscan/$isofile" ]; then
- losetup -f "/run/initramfs/isoscan/$isofile"
- exit 0
- else
- umount "/run/initramfs/isoscan"
- fi
-done
+
+do_iso_scan() {
+ local _name
+ local dev
+ for dev in /dev/disk/by-uuid/*; do
+ _name=$(dev_unit_name "$dev")
+ [ -e /tmp/isoscan-${_name} ] && continue
+ > /tmp/isoscan-${_name}
+ mount -t auto -o ro "$dev" "/run/initramfs/isoscan" || continue
+ if [ -f "/run/initramfs/isoscan/$isofile" ]; then
+ losetup -f "/run/initramfs/isoscan/$isofile"
+ rm -f "$job"
+ exit 0
+ else
+ umount "/run/initramfs/isoscan"
+ fi
+ done
+}
+
+do_iso_scan
rmdir "/run/initramfs/isoscan"
exit 1
if [ -n "$isofile" ]; then
{
- printf 'KERNEL=="loop0", RUN+="/sbin/initqueue --settled --onetime --unique /sbin/iso-scan %s"\n' \
+ printf 'KERNEL=="loop0", RUN+="/sbin/initqueue --settled --unique /sbin/iso-scan %s"\n' \
"'${isofile}'"
} >> /etc/udev/rules.d/99-isofile-mount.rules
fi