diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2021-04-06 20:18:46 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2021-04-06 20:18:46 -0700 |
commit | a1531c020edb7ad659164d6be96378fad956b61b (patch) | |
tree | 693ff7c1d724992a2adee4d85de4790ecef1f97e /aosp/dynamic_partition_control_android.cc | |
parent | c9a4a18fa045995e38ff920916f3be1bcf13239b (diff) | |
parent | 9c7061227a48006b715abc21030bf7cd3038e656 (diff) |
Merge 9c7061227a48006b715abc21030bf7cd3038e656 on remote branch
Change-Id: I715fc97656b8cd7eeee81645a298e785ae38e72f
Diffstat (limited to 'aosp/dynamic_partition_control_android.cc')
-rw-r--r-- | aosp/dynamic_partition_control_android.cc | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/aosp/dynamic_partition_control_android.cc b/aosp/dynamic_partition_control_android.cc index ff2d7ee3..657eec9a 100644 --- a/aosp/dynamic_partition_control_android.cc +++ b/aosp/dynamic_partition_control_android.cc @@ -1013,8 +1013,8 @@ DynamicPartitionControlAndroid::GetPartitionDevice( // target slot. const auto& partition_name_suffix = partition_name + SlotSuffixForSlotNumber(slot); - if (GetVirtualAbCompressionFeatureFlag().IsEnabled() && - IsDynamicPartition(partition_name) && slot != current_slot) { + if (UpdateUsesSnapshotCompression() && IsDynamicPartition(partition_name) && + slot != current_slot) { return {{.mountable_device_path = GetStaticDevicePath(device_dir, partition_name_suffix), .is_dynamic = true}}; @@ -1200,22 +1200,32 @@ bool DynamicPartitionControlAndroid::ResetUpdate(PrefsInterface* prefs) { } bool DynamicPartitionControlAndroid::ListDynamicPartitionsForSlot( - uint32_t current_slot, std::vector<std::string>* partitions) { - if (!GetDynamicPartitionsFeatureFlag().IsEnabled()) { - LOG(ERROR) << "Dynamic partition is not enabled"; - return false; + uint32_t slot, + uint32_t current_slot, + std::vector<std::string>* partitions) { + bool slot_enables_dynamic_partitions = + GetDynamicPartitionsFeatureFlag().IsEnabled(); + // Check if the target slot has dynamic partitions, this may happen when + // applying a retrofit package. + if (slot != current_slot) { + slot_enables_dynamic_partitions = + slot_enables_dynamic_partitions && is_target_dynamic_; + } + + if (!slot_enables_dynamic_partitions) { + LOG(INFO) << "Dynamic partition is not enabled for slot " << slot; + return true; } std::string device_dir_str; TEST_AND_RETURN_FALSE(GetDeviceDir(&device_dir_str)); base::FilePath device_dir(device_dir_str); - auto super_device = - device_dir.Append(GetSuperPartitionName(current_slot)).value(); - auto builder = LoadMetadataBuilder(super_device, current_slot); + auto super_device = device_dir.Append(GetSuperPartitionName(slot)).value(); + auto builder = LoadMetadataBuilder(super_device, slot); TEST_AND_RETURN_FALSE(builder != nullptr); std::vector<std::string> result; - auto suffix = SlotSuffixForSlotNumber(current_slot); + auto suffix = SlotSuffixForSlotNumber(slot); for (const auto& group : builder->ListGroups()) { for (const auto& partition : builder->ListPartitionsInGroup(group)) { std::string_view partition_name = partition->name(); @@ -1332,11 +1342,17 @@ bool DynamicPartitionControlAndroid::IsDynamicPartition( const std::string& partition_name) { if (dynamic_partition_list_.empty() && GetDynamicPartitionsFeatureFlag().IsEnabled()) { - CHECK(ListDynamicPartitionsForSlot(source_slot_, &dynamic_partition_list_)); + // Use the DAP config of the target slot. + CHECK(ListDynamicPartitionsForSlot( + target_slot_, source_slot_, &dynamic_partition_list_)); } return std::find(dynamic_partition_list_.begin(), dynamic_partition_list_.end(), partition_name) != dynamic_partition_list_.end(); } +bool DynamicPartitionControlAndroid::UpdateUsesSnapshotCompression() { + return snapshot_->UpdateUsesCompression(); +} + } // namespace chromeos_update_engine |