loopback_partscan: add some recovery logic for failed `partx -a`
Some build bots have started failing to add partitions from loopback
devices. It's unclear why (new kernel maybe), so add some recovery
logic to our partscan logic to dump logs & retry. This should help
with debugging while not failing builds.
BUG=chromium:999596
TEST=build_image passed
Change-Id: Ic6326738a79cdc26e0864be95c295f1cf6cf7f2a
Reviewed-on: https://chromium-review.googlesource.com/1780891
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/common.sh b/common.sh
index bdbad3d..5e36d51 100644
--- a/common.sh
+++ b/common.sh
@@ -671,10 +671,23 @@
local lb_dev image="$1"
shift
lb_dev=$(sudo losetup --show -f "$@" "${image}")
+
# Ignore problems deleting existing partitions. There shouldn't be any
# which will upset partx, but that's actually ok.
sudo partx -d "${lb_dev}" 2>/dev/null || true
- sudo partx -a "${lb_dev}"
+
+ # First try to add missing partitions.
+ if ! sudo partx -a "${lb_dev}"; then
+ warn "Adding partitions with 'partx -a ${lb_dev}' failed."
+ warn "Dumping full kernel buffer"
+ dmesg >&2 || true
+ sync
+ sleep 1
+
+ # Try a partition update to recover.
+ # https://crbug.com/999596
+ sudo partx -u "${lb_dev}"
+ fi
echo "${lb_dev}"
}