recovery: Map logical partitions before installation

Change-Id: I785b49086a2baf462e97be831b495d7db72f7a42
This commit is contained in:
Erfan Abdi 2020-04-14 23:07:33 +04:30 committed by zlewchan
parent 426398f75b
commit 2034cc3d05
3 changed files with 20 additions and 1 deletions

View file

@ -583,7 +583,7 @@ int main(int argc, char** argv) {
} }
case Device::ENTER_FASTBOOT: case Device::ENTER_FASTBOOT:
if (android::fs_mgr::LogicalPartitionsMapped()) { if (logical_partitions_mapped()) {
ui->Print("Partitions may be mounted - rebooting to enter fastboot."); ui->Print("Partitions may be mounted - rebooting to enter fastboot.");
Reboot("fastboot"); Reboot("fastboot");
} else { } else {

View file

@ -61,3 +61,5 @@ int setup_install_mounts();
// Returns true if there is /cache in the volumes. // Returns true if there is /cache in the volumes.
bool HasCache(); bool HasCache();
bool logical_partitions_mapped();

View file

@ -39,6 +39,7 @@
#include <ext4_utils/wipe.h> #include <ext4_utils/wipe.h>
#include <fs_mgr.h> #include <fs_mgr.h>
#include <fs_mgr/roots.h> #include <fs_mgr/roots.h>
#include <fs_mgr_dm_linear.h>
#include "otautil/sysutil.h" #include "otautil/sysutil.h"
@ -371,6 +372,8 @@ int format_volume(const std::string& volume) {
return format_volume(volume, "", ""); return format_volume(volume, "", "");
} }
static bool logical_partitions_auto_mapped = false;
int setup_install_mounts() { int setup_install_mounts() {
if (fstab.empty()) { if (fstab.empty()) {
LOG(ERROR) << "can't set up install mounts: no fstab loaded"; LOG(ERROR) << "can't set up install mounts: no fstab loaded";
@ -394,6 +397,16 @@ int setup_install_mounts() {
} }
} }
} }
// Map logical partitions
if (android::base::GetBoolProperty("ro.boot.dynamic_partitions", false) &&
!logical_partitions_mapped()) {
std::string super_name = fs_mgr_get_super_partition_name();
if (!android::fs_mgr::CreateLogicalPartitions("/dev/block/by-name/" + super_name)) {
LOG(ERROR) << "Failed to map logical partitions";
} else {
logical_partitions_auto_mapped = true;
}
}
return 0; return 0;
} }
@ -402,3 +415,7 @@ bool HasCache() {
static bool has_cache = volume_for_mount_point(CACHE_ROOT) != nullptr; static bool has_cache = volume_for_mount_point(CACHE_ROOT) != nullptr;
return has_cache; return has_cache;
} }
bool logical_partitions_mapped() {
return android::fs_mgr::LogicalPartitionsMapped() || logical_partitions_auto_mapped;
}