[elbe-devel] [PATCH 2/2] hdimg: clean up losetup() when exceptions are thrown
Bastian Germann
bage at linutronix.de
Wed Jun 16 10:39:36 CEST 2021
Am 16.06.21 um 10:01 schrieb Torben Hohn:
> "losetup -d" is not called for some error paths.
>
> Add try: finally: to make sure "losetup -d" is called.
>
> Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>
Reviewed-by: Bastian Germann <bage at linutronix.de>
> ---
> elbepack/hdimg.py | 53 +++++++++++++++++++++++++++--------------------
> 1 file changed, 30 insertions(+), 23 deletions(-)
>
> diff --git a/elbepack/hdimg.py b/elbepack/hdimg.py
> index f1a72c783..d1cc2e28b 100644
> --- a/elbepack/hdimg.py
> +++ b/elbepack/hdimg.py
> @@ -358,20 +358,26 @@ def create_label(disk, part, ppart, fslabel, target, grub):
> grub.add_fs_entry(entry)
>
> loopdev = entry.losetup()
> - do('mkfs.%s %s %s %s' %
> - (entry.fstype,
> - entry.mkfsopt,
> - entry.get_label_opt(),
> - loopdev))
> -
> - do('mount %s %s' % (loopdev, os.path.join(target, "imagemnt")))
> - do('cp -a "%s/." "%s/"' %
> - (os.path.join(target, "filesystems", entry.id),
> - os.path.join(target, "imagemnt")),
> - allow_fail=True)
> - do('umount %s' % loopdev)
> - entry.tuning(loopdev)
> - do('losetup -d %s' % loopdev)
> +
> + try:
> + do('mkfs.%s %s %s %s' %
> + (entry.fstype,
> + entry.mkfsopt,
> + entry.get_label_opt(),
> + loopdev))
> +
> + do('mount %s %s' % (loopdev, os.path.join(target, "imagemnt")))
> +
> + try:
> + do('cp -a "%s/." "%s/"' %
> + (os.path.join(target, "filesystems", entry.id),
> + os.path.join(target, "imagemnt")),
> + allow_fail=True)
> + finally:
> + do('umount %s' % loopdev)
> + entry.tuning(loopdev)
> + finally:
> + do('losetup -d %s' % loopdev)
>
> return ppart
>
> @@ -382,16 +388,17 @@ def create_binary(disk, part, ppart, target):
>
> loopdev = entry.losetup()
>
> - # copy from buildenv if path starts with /
> - if part.text("binary")[0] == '/':
> - tmp = target + "/" + "chroot" + part.text("binary")
> - # copy from project directory
> - else:
> - tmp = target + "/" + part.text("binary")
> -
> - do(f'dd if="{tmp}" of="{loopdev}"')
> + try:
> + # copy from buildenv if path starts with /
> + if part.text("binary")[0] == '/':
> + tmp = target + "/" + "chroot" + part.text("binary")
> + # copy from project directory
> + else:
> + tmp = target + "/" + part.text("binary")
>
> - do(f'losetup -d "{loopdev}"')
> + do(f'dd if="{tmp}" of="{loopdev}"')
> + finally:
> + do(f'losetup -d "{loopdev}"')
>
> def create_logical_partitions(disk,
> extended,
>
More information about the elbe-devel
mailing list