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

Commit 16d24a60 authored by Mark Salyzyn's avatar Mark Salyzyn Committed by android-build-merger
Browse files

Merge "fs_mgr: init: adb: add fstab argument to fs_mgr_overlayfs_mount_all" am: 37d8bbdf

am: 27c9340a

Change-Id: I970283f8661bee030b7ca47716cac66f12a67e9b
parents 0a379d22 27c9340a
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -216,9 +216,13 @@ void remount_service(unique_fd fd, const std::string& cmd) {

    // If we can use overlayfs, lets get it in place first
    // before we struggle with determining deduplication operations.
    if (!verity_enabled && fs_mgr_overlayfs_setup() && fs_mgr_overlayfs_mount_all()) {
    if (!verity_enabled && fs_mgr_overlayfs_setup()) {
        std::unique_ptr<fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab_default(),
                                                                   fs_mgr_free_fstab);
        if (fs_mgr_overlayfs_mount_all(fstab.get())) {
            WriteFdExactly(fd.get(), "overlayfs mounted\n");
        }
    }

    // Find partitions that are deduplicated, and can be un-deduplicated.
    std::set<std::string> dedup;
+10 −14
Original line number Diff line number Diff line
@@ -569,8 +569,7 @@ static int fs_match(const char *in1, const char *in2)
 *   -1 on failure with errno set to match the 1st mount failure.
 *   0 on success.
 */
static int mount_with_alternatives(struct fstab *fstab, int start_idx, int *end_idx, int *attempted_idx)
{
static int mount_with_alternatives(fstab* fstab, int start_idx, int* end_idx, int* attempted_idx) {
    int i;
    int mount_errno = 0;
    int mounted = 0;
@@ -863,8 +862,7 @@ bool fs_mgr_update_checkpoint_partition(struct fstab_rec* rec) {
 * first successful mount.
 * Returns -1 on error, and  FS_MGR_MNTALL_* otherwise.
 */
int fs_mgr_mount_all(struct fstab *fstab, int mount_mode)
{
int fs_mgr_mount_all(fstab* fstab, int mount_mode) {
    int i = 0;
    int encryptable = FS_MGR_MNTALL_DEV_NOT_ENCRYPTABLE;
    int error_count = 0;
@@ -1093,7 +1091,7 @@ int fs_mgr_mount_all(struct fstab *fstab, int mount_mode)
    }

#if ALLOW_ADBD_DISABLE_VERITY == 1  // "userdebug" build
    fs_mgr_overlayfs_mount_all();
    fs_mgr_overlayfs_mount_all(fstab);
#endif

    if (error_count) {
@@ -1129,7 +1127,7 @@ int fs_mgr_do_mount_one(struct fstab_rec *rec)
 * If multiple fstab entries are to be mounted on "n_name", it will try to mount each one
 * in turn, and stop on 1st success, or no more match.
 */
static int fs_mgr_do_mount_helper(struct fstab* fstab, const char* n_name, char* n_blk_device,
static int fs_mgr_do_mount_helper(fstab* fstab, const char* n_name, char* n_blk_device,
                                  char* tmp_mount_point, int need_checkpoint) {
    int i = 0;
    int mount_errors = 0;
@@ -1244,13 +1242,12 @@ static int fs_mgr_do_mount_helper(struct fstab* fstab, const char* n_name, char*
    return FS_MGR_DOMNT_FAILED;
}

int fs_mgr_do_mount(struct fstab* fstab, const char* n_name, char* n_blk_device,
                    char* tmp_mount_point) {
int fs_mgr_do_mount(fstab* fstab, const char* n_name, char* n_blk_device, char* tmp_mount_point) {
    return fs_mgr_do_mount_helper(fstab, n_name, n_blk_device, tmp_mount_point, -1);
}

int fs_mgr_do_mount(struct fstab* fstab, const char* n_name, char* n_blk_device,
                    char* tmp_mount_point, bool needs_cp) {
int fs_mgr_do_mount(fstab* fstab, const char* n_name, char* n_blk_device, char* tmp_mount_point,
                    bool needs_cp) {
    return fs_mgr_do_mount_helper(fstab, n_name, n_blk_device, tmp_mount_point, needs_cp);
}

@@ -1276,8 +1273,7 @@ int fs_mgr_do_tmpfs_mount(const char *n_name)
/* This must be called after mount_all, because the mkswap command needs to be
 * available.
 */
int fs_mgr_swapon_all(struct fstab *fstab)
{
int fs_mgr_swapon_all(fstab* fstab) {
    int i = 0;
    int flags = 0;
    int err = 0;
@@ -1367,7 +1363,7 @@ int fs_mgr_swapon_all(struct fstab *fstab)
    return ret;
}

struct fstab_rec const* fs_mgr_get_crypt_entry(struct fstab const* fstab) {
struct fstab_rec const* fs_mgr_get_crypt_entry(fstab const* fstab) {
    int i;

    if (!fstab) {
@@ -1391,7 +1387,7 @@ struct fstab_rec const* fs_mgr_get_crypt_entry(struct fstab const* fstab) {
 *
 * real_blk_device must be at least PROPERTY_VALUE_MAX bytes long
 */
void fs_mgr_get_crypt_info(struct fstab* fstab, char* key_loc, char* real_blk_device, size_t size) {
void fs_mgr_get_crypt_info(fstab* fstab, char* key_loc, char* real_blk_device, size_t size) {
    struct fstab_rec const* rec = fs_mgr_get_crypt_entry(fstab);
    if (key_loc) {
        if (rec) {
+8 −10
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ using namespace std::literals;

#if ALLOW_ADBD_DISABLE_VERITY == 0  // If we are a user build, provide stubs

bool fs_mgr_overlayfs_mount_all() {
bool fs_mgr_overlayfs_mount_all(const fstab*) {
    return false;
}

@@ -195,8 +195,8 @@ bool fs_mgr_wants_overlayfs() {
}

bool fs_mgr_overlayfs_already_mounted(const std::string& mount_point) {
    std::unique_ptr<struct fstab, decltype(&fs_mgr_free_fstab)> fstab(
            fs_mgr_read_fstab("/proc/mounts"), fs_mgr_free_fstab);
    std::unique_ptr<fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab("/proc/mounts"),
                                                               fs_mgr_free_fstab);
    if (!fstab) return false;
    const auto lowerdir = kLowerdirOption + mount_point;
    for (auto i = 0; i < fstab->num_entries; ++i) {
@@ -400,16 +400,14 @@ std::vector<std::string> fs_mgr_candidate_list(const fstab* fstab,

}  // namespace

bool fs_mgr_overlayfs_mount_all() {
bool fs_mgr_overlayfs_mount_all(const fstab* fstab) {
    auto ret = false;

    if (!fs_mgr_wants_overlayfs()) return ret;

    std::unique_ptr<struct fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab_default(),
                                                                      fs_mgr_free_fstab);
    if (!fstab) return ret;

    for (const auto& mount_point : fs_mgr_candidate_list(fstab.get())) {
    for (const auto& mount_point : fs_mgr_candidate_list(fstab)) {
        if (fs_mgr_overlayfs_already_mounted(mount_point)) continue;
        if (fs_mgr_overlayfs_mount(mount_point)) ret = true;
    }
@@ -432,7 +430,7 @@ bool fs_mgr_overlayfs_setup(const char* backing, const char* mount_point, bool*
        return ret;
    }

    std::unique_ptr<struct fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab_default(),
    std::unique_ptr<fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab_default(),
                                                               fs_mgr_free_fstab);
    if (fstab && !fs_mgr_get_entry_for_mount_point(fstab.get(), kOverlayMountPoint)) return ret;
    auto mounts = fs_mgr_candidate_list(fstab.get(), fs_mgr_mount_point(fstab.get(), mount_point));
@@ -464,7 +462,7 @@ bool fs_mgr_overlayfs_setup(const char* backing, const char* mount_point, bool*
// If something is altered, set *change.
bool fs_mgr_overlayfs_teardown(const char* mount_point, bool* change) {
    if (change) *change = false;
    mount_point = fs_mgr_mount_point(std::unique_ptr<struct fstab, decltype(&fs_mgr_free_fstab)>(
    mount_point = fs_mgr_mount_point(std::unique_ptr<fstab, decltype(&fs_mgr_free_fstab)>(
                                             fs_mgr_read_fstab_default(), fs_mgr_free_fstab)
                                             .get(),
                                     mount_point);
+1 −1
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@

#include <string>

bool fs_mgr_overlayfs_mount_all();
bool fs_mgr_overlayfs_mount_all(const fstab* fstab);
bool fs_mgr_overlayfs_setup(const char* backing = nullptr, const char* mount_point = nullptr,
                            bool* change = nullptr);
bool fs_mgr_overlayfs_teardown(const char* mount_point = nullptr, bool* change = nullptr);
+1 −1
Original line number Diff line number Diff line
@@ -388,7 +388,7 @@ bool FirstStageMount::MountPartitions() {
        }
    }

    fs_mgr_overlayfs_mount_all();
    fs_mgr_overlayfs_mount_all(device_tree_fstab_.get());

    return true;
}