diff options
Diffstat (limited to 'fs_mgr/fs_mgr.cpp')
-rw-r--r-- | fs_mgr/fs_mgr.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp index ae2e2fe4c..c321fe3eb 100644 --- a/fs_mgr/fs_mgr.cpp +++ b/fs_mgr/fs_mgr.cpp @@ -1588,6 +1588,25 @@ bool fs_mgr_update_verity_state(std::function<fs_mgr_verity_state_callback> call return true; } -std::string fs_mgr_get_super_partition_name(int /* slot */) { +std::string fs_mgr_get_super_partition_name(int slot) { + // Devices upgrading to dynamic partitions are allowed to specify a super + // partition name, assumed to be A/B (non-A/B retrofit is not supported). + // For devices launching with dynamic partition support, the partition + // name must be "super". + std::string super_partition; + if (fs_mgr_get_boot_config_from_kernel_cmdline("super_partition", &super_partition)) { + std::string suffix; + if (slot == 0) { + suffix = "_a"; + } else if (slot == 1) { + suffix = "_b"; + } else if (slot == -1) { + suffix = fs_mgr_get_slot_suffix(); + } + if (suffix.empty()) { + LFATAL << "Super partition name can only be overridden on A/B devices."; + } + return super_partition + suffix; + } return LP_METADATA_DEFAULT_PARTITION_NAME; } |