summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-01-09 05:19:40 +0100
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-01-09 05:19:40 +0100
commitb1486f80b4f4ad48b4ec1ec881a5ecff7ca52956 (patch)
treedc8549dfbb311ce2e0699300f16c1c80f742ff18
parentSnap for 5206983 from d7c1801f8d968aa387e1abaa8628be436a1a00e5 to qt-release (diff)
parentMerge "Use dynamically linked f2fs executables." am: 22a27f9965 am: ad4ce79b4d (diff)
downloadandroid_bootable_recovery-b1486f80b4f4ad48b4ec1ec881a5ecff7ca52956.tar
android_bootable_recovery-b1486f80b4f4ad48b4ec1ec881a5ecff7ca52956.tar.gz
android_bootable_recovery-b1486f80b4f4ad48b4ec1ec881a5ecff7ca52956.tar.bz2
android_bootable_recovery-b1486f80b4f4ad48b4ec1ec881a5ecff7ca52956.tar.lz
android_bootable_recovery-b1486f80b4f4ad48b4ec1ec881a5ecff7ca52956.tar.xz
android_bootable_recovery-b1486f80b4f4ad48b4ec1ec881a5ecff7ca52956.tar.zst
android_bootable_recovery-b1486f80b4f4ad48b4ec1ec881a5ecff7ca52956.zip
-rw-r--r--Android.mk4
-rw-r--r--CleanSpec.mk1
-rw-r--r--roots.cpp32
-rw-r--r--updater/blockimg.cpp21
-rw-r--r--updater/install.cpp9
5 files changed, 31 insertions, 36 deletions
diff --git a/Android.mk b/Android.mk
index 7be123069..429c52dbf 100644
--- a/Android.mk
+++ b/Android.mk
@@ -58,8 +58,8 @@ LOCAL_MODULE := recovery_deps
ifeq ($(TARGET_USERIMAGES_USE_F2FS),true)
ifeq ($(HOST_OS),linux)
LOCAL_REQUIRED_MODULES += \
- sload.f2fs \
- mkfs.f2fs
+ make_f2fs.recovery \
+ sload_f2fs.recovery
endif
endif
diff --git a/CleanSpec.mk b/CleanSpec.mk
index e2d97d42b..fec823e7e 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -49,3 +49,4 @@
# ************************************************
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/EXECUTABLES/recovery_intermediates)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libminui_intermediates/import_includes)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/sbin)
diff --git a/roots.cpp b/roots.cpp
index 6db0ca519..290be477c 100644
--- a/roots.cpp
+++ b/roots.cpp
@@ -223,34 +223,28 @@ int format_volume(const std::string& volume, const std::string& directory) {
// Has to be f2fs because we checked earlier.
static constexpr int kSectorSize = 4096;
- std::string cmd("/sbin/mkfs.f2fs");
- // clang-format off
std::vector<std::string> make_f2fs_cmd = {
- cmd,
- "-g", "android",
+ "/system/bin/make_f2fs",
+ "-g",
+ "android",
v->blk_device,
};
- // clang-format on
if (length >= kSectorSize) {
make_f2fs_cmd.push_back(std::to_string(length / kSectorSize));
}
- int result = exec_cmd(make_f2fs_cmd);
- if (result == 0 && !directory.empty()) {
- cmd = "/sbin/sload.f2fs";
- // clang-format off
+ if (exec_cmd(make_f2fs_cmd) != 0) {
+ PLOG(ERROR) << "format_volume: Failed to make_f2fs on " << v->blk_device;
+ return -1;
+ }
+ if (!directory.empty()) {
std::vector<std::string> sload_f2fs_cmd = {
- cmd,
- "-f", directory,
- "-t", volume,
- v->blk_device,
+ "/system/bin/sload_f2fs", "-f", directory, "-t", volume, v->blk_device,
};
- // clang-format on
- result = exec_cmd(sload_f2fs_cmd);
- }
- if (result != 0) {
- PLOG(ERROR) << "format_volume: Failed " << cmd << " on " << v->blk_device;
- return -1;
+ if (exec_cmd(sload_f2fs_cmd) != 0) {
+ PLOG(ERROR) << "format_volume: Failed to sload_f2fs on " << v->blk_device;
+ return -1;
+ }
}
return 0;
}
diff --git a/updater/blockimg.cpp b/updater/blockimg.cpp
index c4c09098e..9d5b01734 100644
--- a/updater/blockimg.cpp
+++ b/updater/blockimg.cpp
@@ -178,14 +178,18 @@ static bool SetPartitionUpdatedMarker(const std::string& marker) {
return true;
}
-static bool discard_blocks(int fd, off64_t offset, uint64_t size) {
- // Don't discard blocks unless the update is a retry run.
- if (!is_retry) {
+static bool discard_blocks(int fd, off64_t offset, uint64_t size, bool force = false) {
+ // Don't discard blocks unless the update is a retry run or force == true
+ if (!is_retry && !force) {
return true;
}
uint64_t args[2] = { static_cast<uint64_t>(offset), size };
if (ioctl(fd, BLKDISCARD, &args) == -1) {
+ // On devices that does not support BLKDISCARD, ignore the error.
+ if (errno == EOPNOTSUPP) {
+ return true;
+ }
PLOG(ERROR) << "BLKDISCARD ioctl failed";
return false;
}
@@ -1448,14 +1452,9 @@ static int PerformCommandErase(CommandParameters& params) {
LOG(INFO) << " erasing " << tgt.blocks() << " blocks";
for (const auto& [begin, end] : tgt) {
- uint64_t blocks[2];
- // offset in bytes
- blocks[0] = begin * static_cast<uint64_t>(BLOCKSIZE);
- // length in bytes
- blocks[1] = (end - begin) * static_cast<uint64_t>(BLOCKSIZE);
-
- if (ioctl(params.fd, BLKDISCARD, &blocks) == -1) {
- PLOG(ERROR) << "BLKDISCARD ioctl failed";
+ off64_t offset = static_cast<off64_t>(begin) * BLOCKSIZE;
+ size_t size = (end - begin) * BLOCKSIZE;
+ if (!discard_blocks(params.fd, offset, size, true /* force */)) {
return -1;
}
}
diff --git a/updater/install.cpp b/updater/install.cpp
index 0e1028bd1..20a204a83 100644
--- a/updater/install.cpp
+++ b/updater/install.cpp
@@ -482,18 +482,19 @@ Value* FormatFn(const char* name, State* state, const std::vector<std::unique_pt
return StringValue("");
}
std::vector<std::string> f2fs_args = {
- "/sbin/mkfs.f2fs", "-g", "android", "-w", "512", location
+ "/system/bin/make_f2fs", "-g", "android", "-w", "512", location
};
if (size >= 512) {
f2fs_args.push_back(std::to_string(size / 512));
}
if (auto status = exec_cmd(f2fs_args); status != 0) {
- LOG(ERROR) << name << ": mkfs.f2fs failed (" << status << ") on " << location;
+ LOG(ERROR) << name << ": make_f2fs failed (" << status << ") on " << location;
return StringValue("");
}
- if (auto status = exec_cmd({ "/sbin/sload.f2fs", "-t", mount_point, location }); status != 0) {
- LOG(ERROR) << name << ": sload.f2fs failed (" << status << ") on " << location;
+ if (auto status = exec_cmd({ "/system/bin/sload_f2fs", "-t", mount_point, location });
+ status != 0) {
+ LOG(ERROR) << name << ": sload_f2fs failed (" << status << ") on " << location;
return StringValue("");
}