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