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

Commit d7b46e39 authored by Daeho Jeong's avatar Daeho Jeong Committed by Gerrit Code Review
Browse files

Merge "support f2fs device aliasing feature" into main

parents 0508b53f 77ee43a9
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -1603,7 +1603,8 @@ int fs_mgr_mount_all(Fstab* fstab, int mount_mode) {
                                   attempted_entry.fs_type,
                                   attempted_entry.fs_type,
                                   attempted_entry.fs_mgr_flags.is_zoned ? "true" : "false",
                                   attempted_entry.fs_mgr_flags.is_zoned ? "true" : "false",
                                   std::to_string(attempted_entry.length),
                                   std::to_string(attempted_entry.length),
                                   android::base::Join(attempted_entry.user_devices, ' ')},
                                   android::base::Join(attempted_entry.user_devices, ' '),
                                   android::base::Join(attempted_entry.device_aliased, ' ')},
                                  nullptr)) {
                                  nullptr)) {
                        LERROR << "Encryption failed";
                        LERROR << "Encryption failed";
                        set_type_property(encryptable);
                        set_type_property(encryptable);
@@ -1655,7 +1656,8 @@ int fs_mgr_mount_all(Fstab* fstab, int mount_mode) {
                               formattable_entry->fs_type,
                               formattable_entry->fs_type,
                               formattable_entry->fs_mgr_flags.is_zoned ? "true" : "false",
                               formattable_entry->fs_mgr_flags.is_zoned ? "true" : "false",
                               std::to_string(formattable_entry->length),
                               std::to_string(formattable_entry->length),
                               android::base::Join(formattable_entry->user_devices, ' ')},
                               android::base::Join(formattable_entry->user_devices, ' '),
                               android::base::Join(formattable_entry->device_aliased, ' ')},
                              nullptr)) {
                              nullptr)) {
                    LERROR << "Encryption failed";
                    LERROR << "Encryption failed";
                } else {
                } else {
+12 −4
Original line number Original line Diff line number Diff line
@@ -32,6 +32,7 @@
#include <selinux/android.h>
#include <selinux/android.h>
#include <selinux/label.h>
#include <selinux/label.h>
#include <selinux/selinux.h>
#include <selinux/selinux.h>
#include <filesystem>
#include <string>
#include <string>


#include "fs_mgr_priv.h"
#include "fs_mgr_priv.h"
@@ -126,7 +127,8 @@ static int format_ext4(const std::string& fs_blkdev, const std::string& fs_mnt_p


static int format_f2fs(const std::string& fs_blkdev, uint64_t dev_sz, bool needs_projid,
static int format_f2fs(const std::string& fs_blkdev, uint64_t dev_sz, bool needs_projid,
                       bool needs_casefold, bool fs_compress, bool is_zoned,
                       bool needs_casefold, bool fs_compress, bool is_zoned,
                       const std::vector<std::string>& user_devices) {
                       const std::vector<std::string>& user_devices,
                       const std::vector<int>& device_aliased) {
    if (!dev_sz) {
    if (!dev_sz) {
        int rc = get_dev_sz(fs_blkdev, &dev_sz);
        int rc = get_dev_sz(fs_blkdev, &dev_sz);
        if (rc) {
        if (rc) {
@@ -164,9 +166,15 @@ static int format_f2fs(const std::string& fs_blkdev, uint64_t dev_sz, bool needs
    if (is_zoned) {
    if (is_zoned) {
        args.push_back("-m");
        args.push_back("-m");
    }
    }
    for (auto& device : user_devices) {
    for (size_t i = 0; i < user_devices.size(); i++) {
        std::string device_name = user_devices[i];

        args.push_back("-c");
        args.push_back("-c");
        args.push_back(device.c_str());
        if (device_aliased[i]) {
            std::filesystem::path path = device_name;
            device_name += "@" + path.filename().string();
        }
        args.push_back(device_name.c_str());
    }
    }


    if (user_devices.empty()) {
    if (user_devices.empty()) {
@@ -191,7 +199,7 @@ int fs_mgr_do_format(const FstabEntry& entry) {
    if (entry.fs_type == "f2fs") {
    if (entry.fs_type == "f2fs") {
        return format_f2fs(entry.blk_device, entry.length, needs_projid, needs_casefold,
        return format_f2fs(entry.blk_device, entry.length, needs_projid, needs_casefold,
                           entry.fs_mgr_flags.fs_compress, entry.fs_mgr_flags.is_zoned,
                           entry.fs_mgr_flags.fs_compress, entry.fs_mgr_flags.is_zoned,
                           entry.user_devices);
                           entry.user_devices, entry.device_aliased);
    } else if (entry.fs_type == "ext4") {
    } else if (entry.fs_type == "ext4") {
        return format_ext4(entry.blk_device, entry.mount_point, needs_projid,
        return format_ext4(entry.blk_device, entry.mount_point, needs_projid,
                           entry.fs_mgr_flags.ext_meta_csum);
                           entry.fs_mgr_flags.ext_meta_csum);
+1 −0
Original line number Original line Diff line number Diff line
@@ -173,6 +173,7 @@ void ParseUserDevices(const std::string& arg, FstabEntry* entry) {
        entry->fs_mgr_flags.is_zoned = true;
        entry->fs_mgr_flags.is_zoned = true;
    }
    }
    entry->user_devices.push_back(param[1]);
    entry->user_devices.push_back(param[1]);
    entry->device_aliased.push_back(param[0] == "exp_alias" ? 1 : 0);
}
}


bool ParseFsMgrFlags(const std::string& flags, FstabEntry* entry) {
bool ParseFsMgrFlags(const std::string& flags, FstabEntry* entry) {
+1 −0
Original line number Original line Diff line number Diff line
@@ -33,6 +33,7 @@ namespace fs_mgr {
struct FstabEntry {
struct FstabEntry {
    std::string blk_device;
    std::string blk_device;
    std::vector<std::string> user_devices;
    std::vector<std::string> user_devices;
    std::vector<int> device_aliased;
    std::string logical_partition_name;
    std::string logical_partition_name;
    std::string mount_point;
    std::string mount_point;
    std::string fs_type;
    std::string fs_type;