From c1c7311b8ada7fce948afaabe91d72f4a7c0cb68 Mon Sep 17 00:00:00 2001 From: Jaegeuk Kim Date: Tue, 28 Nov 2017 19:48:05 -0800 Subject: add sload.f2fs for recovery format Change-Id: Iddfe54b2b36f2d531925cbe61c98dbfb4903c0d1 Signed-off-by: Jaegeuk Kim --- Android.mk | 2 +- roots.cpp | 19 +++++++++++++------ updater/install.cpp | 9 +++++++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Android.mk b/Android.mk index d9966b7cc..2f57db344 100644 --- a/Android.mk +++ b/Android.mk @@ -89,7 +89,7 @@ LOCAL_REQUIRED_MODULES := e2fsdroid_static mke2fs_static mke2fs.conf ifeq ($(TARGET_USERIMAGES_USE_F2FS),true) ifeq ($(HOST_OS),linux) -LOCAL_REQUIRED_MODULES += mkfs.f2fs +LOCAL_REQUIRED_MODULES += sload.f2fs mkfs.f2fs endif endif diff --git a/roots.cpp b/roots.cpp index eb299ad6b..e2d5d6543 100644 --- a/roots.cpp +++ b/roots.cpp @@ -324,16 +324,23 @@ int format_volume(const char* volume, const char* directory) { } // Has to be f2fs because we checked earlier. - std::vector f2fs_args = { "/sbin/mkfs.f2fs", "-d1", "-f", - "-O", "encrypt", "-O", "quota", - v->blk_device }; + std::string cmd("/sbin/mkfs.f2fs"); + std::vector make_f2fs_cmd = { cmd, "-d1", "-f", "-O", + "encrypt", "-O", "quota", v->blk_device }; if (length >= 512) { - f2fs_args.push_back(std::to_string(length / 512)); + make_f2fs_cmd.push_back(std::to_string(length / 512)); } - int result = exec_cmd(f2fs_args); + int result = exec_cmd(make_f2fs_cmd); + if (result == 0 && directory != nullptr) { + cmd = "/sbin/sload.f2fs"; + std::vector sload_f2fs_cmd = { + cmd, "-f", directory, "-t", volume, v->blk_device, + }; + result = exec_cmd(sload_f2fs_cmd); + } if (result != 0) { - PLOG(ERROR) << "format_volume: Failed to make f2fs on " << v->blk_device; + PLOG(ERROR) << "format_volume: Failed " << cmd << " on " << v->blk_device; return -1; } return 0; diff --git a/updater/install.cpp b/updater/install.cpp index 870b85791..b83d30ff3 100644 --- a/updater/install.cpp +++ b/updater/install.cpp @@ -318,6 +318,15 @@ Value* FormatFn(const char* name, State* state, const std::vector(sload_argv)); + if (status != 0) { + LOG(ERROR) << name << ": sload.f2fs failed (" << status << ") on " << location; + return StringValue(""); + } + return StringValue(location); } else { LOG(ERROR) << name << ": unsupported fs_type \"" << fs_type << "\" partition_type \"" -- cgit v1.2.3