From dea6f7c2a53b0fc970f28d8c45bfc390ef69cff2 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 28 Oct 2024 19:47:09 -0700 Subject: [PATCH] Fix overlayfs on page cf page agnostic builds. Hardcode 4096 block size for f2fs on x86/64. Bug: 375531898 Test: adb_remount_test.sh Change-Id: I9b55f7caf1b77f235168664be2f310bb3bb0d179 --- fs_mgr/fs_mgr.cpp | 8 ++++++++ fs_mgr/fs_mgr_overlayfs_control.cpp | 4 +--- fs_mgr/include/fs_mgr.h | 3 +++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp index fbd990b96..e39ffe70c 100644 --- a/fs_mgr/fs_mgr.cpp +++ b/fs_mgr/fs_mgr.cpp @@ -2314,6 +2314,14 @@ std::string fs_mgr_get_context(const std::string& mount_point) { return context; } +int fs_mgr_f2fs_ideal_block_size() { +#if defined(__i386__) || defined(__x86_64__) + return 4096; +#else + return getpagesize(); +#endif +} + namespace android { namespace fs_mgr { diff --git a/fs_mgr/fs_mgr_overlayfs_control.cpp b/fs_mgr/fs_mgr_overlayfs_control.cpp index 08ad80caa..489b32e7e 100644 --- a/fs_mgr/fs_mgr_overlayfs_control.cpp +++ b/fs_mgr/fs_mgr_overlayfs_control.cpp @@ -387,10 +387,8 @@ bool MakeScratchFilesystem(const std::string& scratch_device) { auto command = ""s; if (!access(kMkF2fs, X_OK) && fs_mgr_filesystem_available("f2fs")) { fs_type = "f2fs"; - command = kMkF2fs + " -w "s; - command += std::to_string(getpagesize()); command = kMkF2fs + " -b "s; - command += std::to_string(getpagesize()); + command += std::to_string(fs_mgr_f2fs_ideal_block_size()); command += " -f -d1 -l" + android::base::Basename(kScratchMountPoint); } else if (!access(kMkExt4, X_OK) && fs_mgr_filesystem_available("ext4")) { fs_type = "ext4"; diff --git a/fs_mgr/include/fs_mgr.h b/fs_mgr/include/fs_mgr.h index 9cfa93f78..79690874e 100644 --- a/fs_mgr/include/fs_mgr.h +++ b/fs_mgr/include/fs_mgr.h @@ -137,3 +137,6 @@ bool fs_mgr_mount_overlayfs_fstab_entry(const android::fs_mgr::FstabEntry& entry // File name used to track if encryption was interrupted, leading to a known bad fs state std::string fs_mgr_metadata_encryption_in_progress_file_name( const android::fs_mgr::FstabEntry& entry); + +// Returns the ideal block size for make_f2fs. Returns -1 on failure. +int fs_mgr_f2fs_ideal_block_size();