Merge "fastbootd: Delete all VAB partitions during "flashall"." into sc-qpr1-dev am: d92cd94d81

Original change: https://googleplex-android-review.googlesource.com/c/platform/system/core/+/15523335

Change-Id: I33e1ea6d6235e5028f278bbe0ea21e14dc3c3416
This commit is contained in:
David Anderson 2021-08-12 18:17:02 +00:00 committed by Automerger Merge Worker
commit 6b1da7ba5b
1 changed files with 14 additions and 4 deletions

View File

@ -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