Add support for casefolding and project quotas
This enables ext4 casefolding and project quotas for adopted storage
cards.
Test: Enable virtual sdcard, adopt, check options on formatted disk
Bug: 138321217
Bug: 138322712
Change-Id: I99c09283cd78c30237cf18ad9ae9384ba0c05396
diff --git a/fs/Ext4.cpp b/fs/Ext4.cpp
index 0059233..8bb930d 100644
--- a/fs/Ext4.cpp
+++ b/fs/Ext4.cpp
@@ -171,6 +171,14 @@
cmd.push_back("-M");
cmd.push_back(target);
+ bool needs_casefold = android::base::GetBoolProperty("ro.emulated_storage.casefold", false);
+ bool needs_projid = android::base::GetBoolProperty("ro.emulated_storage.projid", false);
+
+ if (needs_projid) {
+ cmd.push_back("-I");
+ cmd.push_back("512");
+ }
+
std::string options("has_journal");
if (android::base::GetBoolProperty("vold.has_quota", false)) {
options += ",quota";
@@ -178,10 +186,21 @@
if (fscrypt_is_native()) {
options += ",encrypt";
}
+ if (needs_casefold) {
+ options += ",casefold";
+ }
cmd.push_back("-O");
cmd.push_back(options);
+ if (needs_casefold || needs_projid) {
+ cmd.push_back("-E");
+ std::string extopts = "";
+ if (needs_casefold) extopts += "encoding=utf8,";
+ if (needs_projid) extopts += "quotatype=prjquota,";
+ cmd.push_back(extopts);
+ }
+
cmd.push_back(source);
if (numSectors) {