From f45878a80d412dd79c95e9274c3ee5dd24e1cec9 Mon Sep 17 00:00:00 2001
From: Mark H Weaver <mhw@netris.org>
Date: Tue, 28 Mar 2017 05:52:28 -0400
Subject: [PATCH] mapped-devices: Cope with delayed appearance of LUKS source.

Fixes <https://bugs.gnu.org/27242>.

* gnu/system/mapped-devices.scm (open-luks-device): If
'find-partition-by-luks-uuid' fails, try again once per second, up to ten
times.
---
 gnu/system/mapped-devices.scm | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm
index 2959802c961..18b9f5b4b6d 100644
--- a/gnu/system/mapped-devices.scm
+++ b/gnu/system/mapped-devices.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -114,7 +115,16 @@ (define (open-luks-device source target)
                         ;; udev-populated /dev/disk/by-id directory but udev may
                         ;; be unavailable at the time we run this.
                         (if (bytevector? source)
-                            (or (find-partition-by-luks-uuid source)
+                            (or (let loop ((tries-left 10))
+                                  (and (positive? tries-left)
+                                       (or (find-partition-by-luks-uuid source)
+                                           ;; If the underlying partition is
+                                           ;; not found, try again after
+                                           ;; waiting a second, up to ten
+                                           ;; times.  FIXME: This should be
+                                           ;; dealt with in a more robust way.
+                                           (begin (sleep 1)
+                                                  (loop (- tries-left 1))))))
                                 (error "LUKS partition not found" source))
                             source)
 
-- 
GitLab