diff --git a/fs_mgr/liblp/builder.cpp b/fs_mgr/liblp/builder.cpp index 278331b37..07e3c8ab7 100644 --- a/fs_mgr/liblp/builder.cpp +++ b/fs_mgr/liblp/builder.cpp @@ -212,7 +212,7 @@ void MetadataBuilder::OverrideABForTesting(bool ab_device) { sABOverrideValue = ab_device; } -MetadataBuilder::MetadataBuilder() : auto_slot_suffixing_(false) { +MetadataBuilder::MetadataBuilder() : auto_slot_suffixing_(false), ignore_slot_suffixing_(false) { memset(&geometry_, 0, sizeof(geometry_)); geometry_.magic = LP_METADATA_GEOMETRY_MAGIC; geometry_.struct_size = sizeof(geometry_); @@ -436,7 +436,7 @@ Partition* MetadataBuilder::AddPartition(const std::string& name, const std::str LERROR << "Could not find partition group: " << group_name; return nullptr; } - if (IsABDevice() && !auto_slot_suffixing_ && name != "scratch" && + if (IsABDevice() && !auto_slot_suffixing_ && name != "scratch" && !ignore_slot_suffixing_ && GetPartitionSlotSuffix(name).empty()) { LERROR << "Unsuffixed partition not allowed on A/B device: " << name; return nullptr; @@ -972,6 +972,10 @@ void MetadataBuilder::SetAutoSlotSuffixing() { auto_slot_suffixing_ = true; } +void MetadataBuilder::IgnoreSlotSuffixing() { + ignore_slot_suffixing_ = true; +} + bool MetadataBuilder::IsABDevice() const { if (sABOverrideSet) { return sABOverrideValue; diff --git a/fs_mgr/liblp/include/liblp/builder.h b/fs_mgr/liblp/include/liblp/builder.h index f16d08706..57cce21d5 100644 --- a/fs_mgr/liblp/include/liblp/builder.h +++ b/fs_mgr/liblp/include/liblp/builder.h @@ -248,6 +248,9 @@ class MetadataBuilder { // Set the LP_METADATA_AUTO_SLOT_SUFFIXING flag. void SetAutoSlotSuffixing(); + // If set, checks for slot suffixes will be ignored internally. + void IgnoreSlotSuffixing(); + bool GetBlockDeviceInfo(const std::string& partition_name, BlockDeviceInfo* info) const; bool UpdateBlockDeviceInfo(const std::string& partition_name, const BlockDeviceInfo& info); @@ -310,6 +313,7 @@ class MetadataBuilder { std::vector> groups_; std::vector block_devices_; bool auto_slot_suffixing_; + bool ignore_slot_suffixing_; }; // Read BlockDeviceInfo for a given block device. This always returns false