Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d13b6cf2 authored by Bowgo Tsai's avatar Bowgo Tsai
Browse files

recovery: replacing fs_mgr_read_fstab() with new fs_mgr APIs

The fstab settings of early-mounted partitions (e.g., /vendor) will be in
kernel device tree. Switch to the new API to get the whole settings with
those in device tree:

    fs_mgr_read_fstab_with_dt("/etc/recovery.fstab")

The original default /fstab.{ro.hardware} might be moved to
/vendor/etc/. or /odm/etc/. Use another new API to get the default fstab
instead of using the hard-coded /fstab.{ro.hardware}. This API also
includes the settings from device tree:

    fs_mgr_read_fstab_default()

Bug: 35811655
Test: boot sailfish recovery
Change-Id: Iaa56ac7f7b4c4dfc7180c65f03e9a37b94f1de09
parent f0e8f072
Loading
Loading
Loading
Loading
+5 −18
Original line number Diff line number Diff line
@@ -29,27 +29,14 @@
#include <android-base/unique_fd.h>
#include <fs_mgr.h>

static struct fstab* read_fstab(std::string* err) {
  std::string ro_hardware = android::base::GetProperty("ro.hardware", "");
  if (ro_hardware.empty()) {
    *err = "failed to get ro.hardware";
    return nullptr;
  }
  // The fstab path is always "/fstab.${ro.hardware}".
  std::string fstab_path = "/fstab." + ro_hardware;
  struct fstab* fstab = fs_mgr_read_fstab(fstab_path.c_str());
  if (fstab == nullptr) {
    *err = "failed to read " + fstab_path;
  }
  return fstab;
}

static std::string get_misc_blk_device(std::string* err) {
  struct fstab* fstab = read_fstab(err);
  if (fstab == nullptr) {
  std::unique_ptr<fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab_default(),
                                                             fs_mgr_free_fstab);
  if (!fstab) {
    *err = "failed to read default fstab";
    return "";
  }
  fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab, "/misc");
  fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab.get(), "/misc");
  if (record == nullptr) {
    *err = "failed to find /misc partition";
    return "";
+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ void load_volume_table()
    int i;
    int ret;

    fstab = fs_mgr_read_fstab("/etc/recovery.fstab");
    fstab = fs_mgr_read_fstab_with_dt("/etc/recovery.fstab");
    if (!fstab) {
        LOG(ERROR) << "failed to read /etc/recovery.fstab";
        return;
+5 −12
Original line number Diff line number Diff line
@@ -24,21 +24,14 @@

// Check if the /misc entry exists in the fstab.
static bool parse_misc() {
  // The fstab path is "/fstab.${ro.hardware}".
  std::string ro_hardware = android::base::GetProperty("ro.hardware", "");
  if (ro_hardware.empty()) {
    GTEST_LOG_(INFO) << "Failed to get ro.hardware.";
  std::unique_ptr<fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab_default(),
                                                             fs_mgr_free_fstab);
  if (!fstab) {
    GTEST_LOG_(INFO) << "Failed to read default fstab";
    return false;
  }

  std::string fstab_path = "/fstab." + ro_hardware;
  fstab* fstab = fs_mgr_read_fstab(fstab_path.c_str());
  if (fstab == nullptr) {
    GTEST_LOG_(INFO) << "Failed to read " << fstab_path;
    return false;
  }

  fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab, "/misc");
  fstab_rec* record = fs_mgr_get_entry_for_mount_point(fstab.get(), "/misc");
  if (record == nullptr) {
    GTEST_LOG_(INFO) << "Failed to find /misc in fstab.";
    return false;
+2 −13
Original line number Diff line number Diff line
@@ -163,20 +163,9 @@ static void add_block_to_ranges(std::vector<int>& ranges, int new_block) {
}

static struct fstab* read_fstab() {
    fstab = NULL;

    // The fstab path is always "/fstab.${ro.hardware}".
    std::string ro_hardware = android::base::GetProperty("ro.hardware", "");
    if (ro_hardware.empty()) {
        LOG(ERROR) << "failed to get ro.hardware";
        return NULL;
    }

    std::string fstab_path = "/fstab." + ro_hardware;

    fstab = fs_mgr_read_fstab(fstab_path.c_str());
    fstab = fs_mgr_read_fstab_default();
    if (!fstab) {
        LOG(ERROR) << "failed to read " << fstab_path;
        LOG(ERROR) << "failed to read default fstab";
        return NULL;
    }