diff --git a/init/first_stage_mount.cpp b/init/first_stage_mount.cpp index 71a8e0de6..6f97d1919 100644 --- a/init/first_stage_mount.cpp +++ b/init/first_stage_mount.cpp @@ -68,6 +68,7 @@ class FirstStageMount { bool CreateLogicalPartitions(); bool MountPartition(fstab_rec* fstab_rec); bool MountPartitions(); + bool IsDmLinearEnabled(); bool GetBackingDmLinearDevices(); virtual ListenerAction UeventCallback(const Uevent& uevent); @@ -134,22 +135,6 @@ static bool IsRecoveryMode() { return !ForceNormalBoot() && access("/system/bin/recovery", F_OK) == 0; } -static inline bool IsDmLinearEnabled() { - static bool checked = false; - static bool enabled = false; - if (checked) { - return enabled; - } - import_kernel_cmdline(false, - [](const std::string& key, const std::string& value, bool in_qemu) { - if (key == "androidboot.logical_partitions" && value == "1") { - enabled = true; - } - }); - checked = true; - return enabled; -} - // Class Definitions // ----------------- FirstStageMount::FirstStageMount() @@ -198,6 +183,13 @@ bool FirstStageMount::InitDevices() { return GetBackingDmLinearDevices() && GetDmVerityDevices() && InitRequiredDevices(); } +bool FirstStageMount::IsDmLinearEnabled() { + for (auto fstab_rec : mount_fstab_recs_) { + if (fs_mgr_is_logical(fstab_rec)) return true; + } + return false; +} + bool FirstStageMount::GetBackingDmLinearDevices() { // Add any additional devices required for dm-linear mappings. if (!IsDmLinearEnabled()) {