From d6676b2245c9f13514b9c29baa70010df0927d13 Mon Sep 17 00:00:00 2001
From: Teo Mrnjavac <teo@kde.org>
Date: Tue, 21 Jun 2016 17:20:45 +0200
Subject: [PATCH] Retry mke2fs before giving up.

---
 .../partition/jobs/FormatPartitionJob.cpp     | 24 ++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/modules/partition/jobs/FormatPartitionJob.cpp b/src/modules/partition/jobs/FormatPartitionJob.cpp
index a1a939f599..0ea9192dbd 100644
--- a/src/modules/partition/jobs/FormatPartitionJob.cpp
+++ b/src/modules/partition/jobs/FormatPartitionJob.cpp
@@ -1,7 +1,7 @@
 /* === This file is part of Calamares - <http://github.com/calamares> ===
  *
  *   Copyright 2014, Aurélien Gâteau <agateau@kde.org>
- *   Copyright 2015, Teo Mrnjavac <teo@kde.org>
+ *   Copyright 2015-2016, Teo Mrnjavac <teo@kde.org>
  *
  *   Calamares is free software: you can redistribute it and/or modify
  *   it under the terms of the GNU General Public License as published by
@@ -35,6 +35,7 @@
 
 // Qt
 #include <QScopedPointer>
+#include <QThread>
 
 FormatPartitionJob::FormatPartitionJob( Device* device, Partition* partition )
     : PartitionJob( partition )
@@ -101,10 +102,27 @@ FormatPartitionJob::exec()
     }
 
     FileSystem& fs = m_partition->fileSystem();
-    if ( !fs.create( report, partitionPath ) )
+
+    bool ok = fs.create( report, partitionPath );
+    int retries = 0;
+    const int MAX_RETRIES = 10;
+    while ( !ok )
+    {
+        cDebug() << "Partition" << m_partition->partitionPath()
+                 << "might not be ready yet, retrying (" << ++retries
+                 << "/" << MAX_RETRIES << ") ...";
+        QThread::sleep( 2 /*seconds*/ );
+        ok = fs.create( report, partitionPath );
+
+        if ( retries == MAX_RETRIES )
+            break;
+    }
+
+    if ( !ok )
     {
         return Calamares::JobResult::error(
-                   tr( "The installer failed to create file system on partition %1." ).arg( partitionPath ),
+                   tr( "The installer failed to create file system on partition %1." )
+                   .arg( partitionPath ),
                    report.toText()
                );
     }
-- 
GitLab