diff options
author | Mathieu Othacehe <othacehe@gnu.org> | 2022-10-22 22:27:57 +0200 |
---|---|---|
committer | Mathieu Othacehe <othacehe@gnu.org> | 2022-10-31 09:34:13 +0100 |
commit | ab974ed709976d34917c8f6f9e5cc0004547af45 (patch) | |
tree | 8057b831173f951fb4ca45599c156cf059a8bc2d | |
parent | 5197b07e0e32d284ed2db51746adffcb3f9297f2 (diff) | |
download | guix-ab974ed709976d34917c8f6f9e5cc0004547af45.tar.gz guix-ab974ed709976d34917c8f6f9e5cc0004547af45.zip |
installer: parted: Retry failing read-partition-uuid call.
Fixes: <https://issues.guix.gnu.org/53541>.
* gnu/installer/parted.scm (read-partition-uuid/retry): New procedure.
(check-user-partitions): Use it.
-rw-r--r-- | gnu/installer/parted.scm | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm index fcc936a391..82375d29e3 100644 --- a/gnu/installer/parted.scm +++ b/gnu/installer/parted.scm @@ -319,6 +319,25 @@ PARTED-OBJECT field equals PARTITION, return #f if not found." partition)) user-partitions)) +(define (read-partition-uuid/retry file-name) + "Call READ-PARTITION-UUID with 5 retries spaced by 1 second. This is useful +if the partition table is updated by the kernel at the time this function is +called, causing the underlying /dev to be absent." + (define max-retries 5) + + (let loop ((retry max-retries)) + (catch #t + (lambda () + (read-partition-uuid file-name)) + (lambda _ + (if (> retry 0) + (begin + (sleep 1) + (loop (- retry 1))) + (error + (format #f (G_ "Could not open ~a after ~a retries~%.") + file-name max-retries))))))) + ;; ;; Devices @@ -1108,7 +1127,7 @@ Return #t if all the statements are valid." (need-formatting? (user-partition-need-formatting? user-partition))) (or need-formatting? - (read-partition-uuid file-name) + (read-partition-uuid/retry file-name) (raise (condition (&cannot-read-uuid |