From 00d77d199aeadf8001ddae3e0269bdf81f294fa5 Mon Sep 17 00:00:00 2001 From: Andrew Jeddeloh Date: Fri, 13 Dec 2019 00:15:49 +0000 Subject: [PATCH] build_library/disk_util: work around losetup bug Retry losetup if it fails, up to 5 times with 5 seconds between retries. --- build_library/disk_util | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/build_library/disk_util b/build_library/disk_util index 42b2880c53..f45e03125c 100755 --- a/build_library/disk_util +++ b/build_library/disk_util @@ -11,6 +11,7 @@ import re import subprocess import sys import tempfile +import time import uuid # First sector we can use. @@ -433,11 +434,22 @@ def FormatFat(part, device): def PartitionLoop(options, partition): """Allocate (and automatically free) loop devices for a partition.""" - loop_dev = subprocess.check_output(['sudo', 'losetup', - '--offset', str(partition['first_byte']), - '--sizelimit', str(partition['bytes']), - '--find', '--show', options.disk_image]) - loop_dev = loop_dev.strip() + for i in range(0,5): + try: + loop_dev = subprocess.check_output(['sudo', 'losetup', + '--offset', str(partition['first_byte']), + '--sizelimit', str(partition['bytes']), + '--find', '--show', options.disk_image]) + loop_dev = loop_dev.strip() + err = None + break + except subprocess.CalledProcessError as error: + print("Failed to set up loopback, attempt %d" % i) + err = error + time.sleep(5) + + if err is not None: + raise err try: yield loop_dev