From 51c773c3f96170e5548ff6ecc4679be6d272e5a6 Mon Sep 17 00:00:00 2001 From: Jakob Petsovits Date: Fri, 1 Nov 2024 20:20:52 -0400 Subject: [PATCH] [partition] Use the same last sector for root vs. swap partitions If we have already determined that `lastSectorForRoot` should be a lower value for GPT tables, the calculation of swap partition boundaries shouldn't keep using `dev->totalLogical()` for its own size. Fixes #2367 --- src/modules/partition/core/PartitionActions.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index 4ec9653db..ddfabaf85 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -108,7 +108,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO partType = isEfi ? PartitionTable::gpt : PartitionTable::msdos; } // last usable sector possibly allowing for secondary GPT using 66 sectors (256 entries) - qint64 lastSectorForRoot = dev->totalLogical() - (partType == PartitionTable::gpt ? 67 : 1); + const qint64 lastUsableSector = dev->totalLogical() - ( partType == PartitionTable::gpt ? 67 : 1 ); // Looking up the defaultFsType (which should name a filesystem type) // will log an error and set the type to Unknown if there's something wrong. @@ -154,7 +154,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO const quint64 sectorSize = quint64( dev->logicalSize() ); if ( mayCreateSwap ) { - quint64 availableSpaceB = quint64( dev->totalLogical() - firstFreeSector ) * sectorSize; + quint64 availableSpaceB = quint64( lastUsableSector - firstFreeSector + 1 ) * sectorSize; suggestedSwapSizeB = swapSuggestion( availableSpaceB, o.swap ); // Space required by this installation is what the distro claims is needed // (via global configuration) plus the swap size plus a fudge factor of @@ -165,6 +165,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO shouldCreateSwap = availableSpaceB > requiredSpaceB; } + qint64 lastSectorForRoot = lastUsableSector; if ( shouldCreateSwap ) { lastSectorForRoot -= suggestedSwapSizeB / sectorSize + 1; @@ -183,7 +184,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO FileSystem::LinuxSwap, QStringLiteral( "swap" ), lastSectorForRoot + 1, - dev->totalLogical() - 1, + lastUsableSector, KPM_PARTITION_FLAG( None ) ); } else @@ -194,7 +195,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO FileSystem::LinuxSwap, QStringLiteral( "swap" ), lastSectorForRoot + 1, - dev->totalLogical() - 1, + lastUsableSector, o.luksFsType, o.luksPassphrase, KPM_PARTITION_FLAG( None ) );