Merge "Refine the first stage mount for DSU" am: 62f35129d4 am: ea4f8eaffb am: c10a7fc0f5
Change-Id: I48b8810e1ef93c2a2ee574f0b6a01249143aa5e3
diff --git a/fs_mgr/libfiemap/image_manager.cpp b/fs_mgr/libfiemap/image_manager.cpp
index 30eb5a0..280318e 100644
--- a/fs_mgr/libfiemap/image_manager.cpp
+++ b/fs_mgr/libfiemap/image_manager.cpp
@@ -26,6 +26,7 @@
#include <fs_mgr_dm_linear.h>
#include <libdm/loop_control.h>
#include <libfiemap/split_fiemap_writer.h>
+#include <libgsi/libgsi.h>
#include "metadata.h"
#include "utility.h"
@@ -34,6 +35,7 @@
namespace fiemap {
using namespace std::literals;
+using android::base::ReadFileToString;
using android::base::unique_fd;
using android::dm::DeviceMapper;
using android::dm::DmDeviceState;
@@ -53,6 +55,11 @@
std::unique_ptr<ImageManager> ImageManager::Open(const std::string& dir_prefix) {
auto metadata_dir = "/metadata/gsi/" + dir_prefix;
auto data_dir = "/data/gsi/" + dir_prefix;
+ auto install_dir_file = gsi::DsuInstallDirFile(gsi::GetDsuSlot(dir_prefix));
+ std::string path;
+ if (ReadFileToString(install_dir_file, &path)) {
+ data_dir = path;
+ }
return Open(metadata_dir, data_dir);
}
diff --git a/init/first_stage_mount.cpp b/init/first_stage_mount.cpp
index 6d1259d..9da32e4 100644
--- a/init/first_stage_mount.cpp
+++ b/init/first_stage_mount.cpp
@@ -58,7 +58,6 @@
using android::fs_mgr::ReadFstabFromDt;
using android::fs_mgr::SkipMountingPartitions;
using android::fs_mgr::TransformFstabForDsu;
-using android::init::WriteFile;
using android::snapshot::SnapshotManager;
using namespace std::literals;
@@ -620,7 +619,13 @@
}
return InitRequiredDevices(std::move(devices));
};
- auto images = IImageManager::Open("dsu", 0ms);
+ std::string active_dsu;
+ if (!gsi::GetActiveDsu(&active_dsu)) {
+ LOG(ERROR) << "Failed to GetActiveDsu";
+ return;
+ }
+ LOG(INFO) << "DSU slot: " << active_dsu;
+ auto images = IImageManager::Open("dsu/" + active_dsu, 0ms);
if (!images || !images->MapAllImages(init_devices)) {
LOG(ERROR) << "DSU partition layout could not be instantiated";
return;