fastbootd: Delete all VAB partitions during "flashall".
With VAB we encourage a smaller super partition, so make sure we delete "other" slot partitions during flashing. Otherwise, we may not have enough space in super. Bug: 195930130 Test: set_active, flashall, ensure other slot is deleted Change-Id: Ic6a4f60e8f4c7abb8af7b38228753ad8ed85eedf
This commit is contained in:
parent
6e3f64e7d8
commit
1f670ef7a8
1 changed files with 14 additions and 4 deletions
|
@ -187,11 +187,17 @@ bool UpdateSuper(FastbootDevice* device, const std::string& super_name, bool wip
|
|||
", build may be missing broken or missing boot_devices");
|
||||
}
|
||||
|
||||
std::string slot_suffix = device->GetCurrentSlot();
|
||||
uint32_t slot_number = SlotNumberForSlotSuffix(slot_suffix);
|
||||
|
||||
std::string other_slot_suffix;
|
||||
if (!slot_suffix.empty()) {
|
||||
other_slot_suffix = (slot_suffix == "_a") ? "_b" : "_a";
|
||||
}
|
||||
|
||||
// If we are unable to read the existing metadata, then the super partition
|
||||
// is corrupt. In this case we reflash the whole thing using the provided
|
||||
// image.
|
||||
std::string slot_suffix = device->GetCurrentSlot();
|
||||
uint32_t slot_number = SlotNumberForSlotSuffix(slot_suffix);
|
||||
std::unique_ptr<LpMetadata> old_metadata = ReadMetadata(super_name, slot_number);
|
||||
if (wipe || !old_metadata) {
|
||||
if (!FlashPartitionTable(super_name, *new_metadata.get())) {
|
||||
|
@ -203,11 +209,15 @@ bool UpdateSuper(FastbootDevice* device, const std::string& super_name, bool wip
|
|||
}
|
||||
|
||||
std::set<std::string> partitions_to_keep;
|
||||
bool virtual_ab = android::base::GetBoolProperty("ro.virtual_ab.enabled", false);
|
||||
for (const auto& partition : old_metadata->partitions) {
|
||||
// Preserve partitions in the other slot, but not the current slot.
|
||||
std::string partition_name = GetPartitionName(partition);
|
||||
if (!slot_suffix.empty() && GetPartitionSlotSuffix(partition_name) == slot_suffix) {
|
||||
continue;
|
||||
if (!slot_suffix.empty()) {
|
||||
auto part_suffix = GetPartitionSlotSuffix(partition_name);
|
||||
if (part_suffix == slot_suffix || (part_suffix == other_slot_suffix && virtual_ab)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
std::string group_name = GetPartitionGroupName(old_metadata->groups[partition.group_index]);
|
||||
// Skip partitions in the COW group
|
||||
|
|
Loading…
Reference in a new issue