From f0f652a5911676946fb6164273429aa1f53b76c6 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Mon, 11 Jun 2018 14:30:38 +0200 Subject: [PATCH] Use 'eval' when querying the blocklist 32bit perl erros out if you pack/unpack 64bit integers. --- build-vm | 2 +- computeblocklists | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/build-vm b/build-vm index 7bdc6393b..34fc318c4 100644 --- a/build-vm +++ b/build-vm @@ -997,7 +997,7 @@ vm_wrapup_build() { echo "... saving built packages" swapoff "$VM_SWAP" pushd "$BUILD_ROOT$TOPDIR" >/dev/null - find "$@" -print0 | computeblocklists --padstart 512 --padend 512 -v --manifest - -0 > "$VM_SWAP" + find "$@" -print0 | computeblocklists --padstart 512 --padend 512 -v --manifest - -0 > "$VM_SWAP" || cleanup_and_exit 1 popd >/dev/null fi } diff --git a/computeblocklists b/computeblocklists index ddc52b676..cc8345adb 100755 --- a/computeblocklists +++ b/computeblocklists @@ -62,7 +62,7 @@ sub fibmap_blocklist($$$) { my $FIBMAP = 1; if (not defined ioctl($fd, 1, $block)) { if (not defined ioctl($fd, alt_ioctl($FIBMAP), $block)) { - return undef; + die("fibmap ioctl: $!\n"); } } $block = unpack('I', $block); @@ -114,7 +114,7 @@ sub fiemap_blocklist($$$) { if (not defined ioctl($file, $FIEMAP, $x)) { if (not defined ioctl($file, alt_ioctl($FIEMAP), $x)) { - return undef; + die("fiemap ioctl: $!\n"); } } @@ -286,12 +286,15 @@ while (1) { print "f $n $st_size $bsize"; - if (not defined fiemap_blocklist($fd, $st_size, $bsize)) { - if (not defined fibmap_blocklist($fd, $st_size, $bsize)) { - die "Couldn't get block list for $n: $!\n"; + eval { fiemap_blocklist($fd, $st_size, $bsize) }; + if ($@) { + warn($@); + eval { fibmap_blocklist($fd, $st_size, $bsize) }; + if ($@) { + warn($@); + die "Could not get block list for $n\n"; } } - print "\n"; close($fd); }