From 477f3e5f4afbf23618ae248f6fc65b3693a70a14 Mon Sep 17 00:00:00 2001 From: Daniel Rosenberg Date: Tue, 19 Nov 2019 20:30:46 -0800 Subject: [PATCH] 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 --- fs/Ext4.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 @@ status_t Format(const std::string& source, unsigned long numSectors, const std:: 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 @@ status_t Format(const std::string& source, unsigned long numSectors, const std:: 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) {