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.
This commit is contained in:
		
							parent
							
								
									5197b07e0e
								
							
						
					
					
						commit
						ab974ed709
					
				
					 1 changed files with 20 additions and 1 deletions
				
			
		|  | @ -319,6 +319,25 @@ PARTED-OBJECT field equals PARTITION, return #f if not found." | ||||||
|                   partition)) |                   partition)) | ||||||
|         user-partitions)) |         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 | ;; Devices | ||||||
|  | @ -1108,7 +1127,7 @@ Return #t if all the statements are valid." | ||||||
|                (need-formatting? |                (need-formatting? | ||||||
|                 (user-partition-need-formatting? user-partition))) |                 (user-partition-need-formatting? user-partition))) | ||||||
|            (or need-formatting? |            (or need-formatting? | ||||||
|                (read-partition-uuid file-name) |                (read-partition-uuid/retry file-name) | ||||||
|                (raise |                (raise | ||||||
|                 (condition |                 (condition | ||||||
|                  (&cannot-read-uuid |                  (&cannot-read-uuid | ||||||
|  |  | ||||||
		Reference in a new issue