f2fs format: Remade f2fs command

Main reason for this change was to add proper support for casefolding and project id quota
so I adapted how the command was built, similar how the AOSP recovery crafts it.

Your device tree also need to include this
$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)

references:
https://android.googlesource.com/platform/bootable/recovery/+/refs/tags/android-11.0.0_r29/recovery_utils/roots.cpp#246
https://source.android.com/devices/storage/sdcardfs-deprecate

Change-Id: Id45b8ed33fe4f2317f0559ef77423f70d892b91c
This commit is contained in:
systemad
2021-08-12 20:33:20 +02:00
committed by bigbiff
parent bcd23d3e0c
commit db475c9015
+19 -10
View File
@@ -2386,22 +2386,23 @@ bool TWPartition::Wipe_RMRF() {
}
bool TWPartition::Wipe_F2FS() {
std::string command;
std::string f2fs_bin;
std::string f2fs_command;
if (!UnMount(true))
return false;
if (TWFunc::Path_Exists("/system/bin/mkfs.f2fs"))
f2fs_bin = "/system/bin/mkfs.f2fs";
f2fs_command = "/system/bin/mkfs.f2fs";
else if (TWFunc::Path_Exists("/system/bin/make_f2fs"))
f2fs_bin = "/system/bin/make_f2fs";
f2fs_command = "/system/bin/make_f2fs -g android";
else {
LOGINFO("mkfs.f2fs binary not found, using rm -rf to wipe.\n");
return Wipe_RMRF();
}
bool NeedPreserveFooter = true;
bool needs_casefold = false;
bool needs_projid = false;
Find_Actual_Block_Device();
if (!Is_Present) {
@@ -2409,19 +2410,27 @@ bool TWPartition::Wipe_F2FS() {
gui_msg(Msg(msg::kError, "unable_to_wipe=Unable to wipe {1}.")(Display_Name));
return false;
}
needs_casefold = android::base::GetBoolProperty("external_storage.casefold.enabled", false);
needs_projid = android::base::GetBoolProperty("external_storage.projid.enabled", false);
unsigned long long dev_sz = TWFunc::IOCTL_Get_Block_Size(Actual_Block_Device.c_str());
if (!dev_sz)
return false;
if (NeedPreserveFooter)
Length < 0 ? dev_sz += Length : dev_sz -= CRYPT_FOOTER_OFFSET;
char dev_sz_str[48];
sprintf(dev_sz_str, "%llu", (dev_sz / 4096));
command = f2fs_bin + " -d1 -f -O encrypt -O quota -O verity -w 4096 " + Actual_Block_Device + " " + dev_sz_str;
if(needs_projid)
f2fs_command += " -O project_quota,extra_attr";
if(needs_casefold)
f2fs_command += " -O casefold -C utf8";
f2fs_command += " " + Actual_Block_Device + " " + dev_sz_str;
if (TWFunc::Path_Exists("/system/bin/sload.f2fs")) {
command += " && sload.f2fs -t /data " + Actual_Block_Device;
f2fs_command += " && sload.f2fs -t /data " + Actual_Block_Device;
}
/**
@@ -2432,8 +2441,8 @@ bool TWPartition::Wipe_F2FS() {
Crypto_Key_Location != "footer") {
NeedPreserveFooter = false;
}
LOGINFO("mkfs.f2fs command: %s\n", f2fs_bin.c_str());
if (TWFunc::Exec_Cmd(command) == 0) {
LOGINFO("mkfs.f2fs command: %s\n", f2fs_command.c_str());
if (TWFunc::Exec_Cmd(f2fs_command) == 0) {
if (NeedPreserveFooter)
Wipe_Crypto_Key();
Recreate_AndSec_Folder();