From 12e96152ca3f0e091433d399eafe0ad6c646351a Mon Sep 17 00:00:00 2001 From: Minchan Kim Date: Tue, 15 Oct 2019 14:41:18 -0700 Subject: [PATCH] fs_mgr: remove configurable zram backing file path Bug: 142795879 Test: zram_loopback_path never change file location. Test: Setting zram_backingdev_size on fstab turns on zram writeback. Change-Id: If244e690405eb925270f767a22e4db95cbd8ba8a Signed-off-by: Minchan Kim --- fs_mgr/fs_mgr.cpp | 21 +++++++--------- fs_mgr/fs_mgr_fstab.cpp | 11 +++----- fs_mgr/include_fstab/fstab/fstab.h | 4 +-- fs_mgr/tests/fs_mgr_test.cpp | 40 ++++++++++-------------------- 4 files changed, 26 insertions(+), 50 deletions(-) diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp index 4ba1c49cc..8a41a8b74 100644 --- a/fs_mgr/fs_mgr.cpp +++ b/fs_mgr/fs_mgr.cpp @@ -1493,12 +1493,10 @@ static bool InstallZramDevice(const std::string& device) { return true; } -static bool PrepareZramDevice(const std::string& loop, off64_t size, const std::string& bdev) { - if (loop.empty() && bdev.empty()) return true; +static bool PrepareZramBackingDevice(off64_t size) { - if (bdev.length()) { - return InstallZramDevice(bdev); - } + constexpr const char* file_path = "/data/per_boot/zram_swap"; + if (size == 0) return true; // Get free loopback unique_fd loop_fd(TEMP_FAILURE_RETRY(open("/dev/loop-control", O_RDWR | O_CLOEXEC))); @@ -1514,13 +1512,13 @@ static bool PrepareZramDevice(const std::string& loop, off64_t size, const std:: } // Prepare target path - unique_fd target_fd(TEMP_FAILURE_RETRY(open(loop.c_str(), O_RDWR | O_CREAT | O_CLOEXEC, 0600))); + unique_fd target_fd(TEMP_FAILURE_RETRY(open(file_path, O_RDWR | O_CREAT | O_CLOEXEC, 0600))); if (target_fd.get() == -1) { - PERROR << "Cannot open target path: " << loop; + PERROR << "Cannot open target path: " << file_path; return false; } if (fallocate(target_fd.get(), 0, 0, size) < 0) { - PERROR << "Cannot truncate target path: " << loop; + PERROR << "Cannot truncate target path: " << file_path; return false; } @@ -1556,11 +1554,10 @@ bool fs_mgr_swapon_all(const Fstab& fstab) { continue; } - if (!PrepareZramDevice(entry.zram_loopback_path, entry.zram_loopback_size, entry.zram_backing_dev_path)) { - LERROR << "Skipping losetup for '" << entry.blk_device << "'"; - } - if (entry.zram_size > 0) { + if (!PrepareZramBackingDevice(entry.zram_backingdev_size)) { + LERROR << "Failure of zram backing device file for '" << entry.blk_device << "'"; + } // A zram_size was specified, so we need to configure the // device. There is no point in having multiple zram devices // on a system (all the memory comes from the same pool) so diff --git a/fs_mgr/fs_mgr_fstab.cpp b/fs_mgr/fs_mgr_fstab.cpp index 2ff5243e1..19afcdf41 100644 --- a/fs_mgr/fs_mgr_fstab.cpp +++ b/fs_mgr/fs_mgr_fstab.cpp @@ -343,15 +343,10 @@ void ParseFsMgrFlags(const std::string& flags, FstabEntry* entry) { } else if (StartsWith(flag, "sysfs_path=")) { // The path to trigger device gc by idle-maint of vold. entry->sysfs_path = arg; - } else if (StartsWith(flag, "zram_loopback_path=")) { - // The path to use loopback for zram. - entry->zram_loopback_path = arg; - } else if (StartsWith(flag, "zram_loopback_size=")) { - if (!ParseByteCount(arg, &entry->zram_loopback_size)) { - LWARNING << "Warning: zram_loopback_size= flag malformed: " << arg; + } else if (StartsWith(flag, "zram_backingdev_size=")) { + if (!ParseByteCount(arg, &entry->zram_backingdev_size)) { + LWARNING << "Warning: zram_backingdev_size= flag malformed: " << arg; } - } else if (StartsWith(flag, "zram_backing_dev_path=")) { - entry->zram_backing_dev_path = arg; } else { LWARNING << "Warning: unknown flag: " << flag; } diff --git a/fs_mgr/include_fstab/fstab/fstab.h b/fs_mgr/include_fstab/fstab/fstab.h index 3c517dc44..953aa6b34 100644 --- a/fs_mgr/include_fstab/fstab/fstab.h +++ b/fs_mgr/include_fstab/fstab/fstab.h @@ -52,9 +52,7 @@ struct FstabEntry { off64_t logical_blk_size = 0; std::string sysfs_path; std::string vbmeta_partition; - std::string zram_loopback_path; - uint64_t zram_loopback_size = 512 * 1024 * 1024; // 512MB by default; - std::string zram_backing_dev_path; + uint64_t zram_backingdev_size = 0; std::string avb_keys; struct FsMgrFlags { diff --git a/fs_mgr/tests/fs_mgr_test.cpp b/fs_mgr/tests/fs_mgr_test.cpp index a7ea81793..544976fc2 100644 --- a/fs_mgr/tests/fs_mgr_test.cpp +++ b/fs_mgr/tests/fs_mgr_test.cpp @@ -392,9 +392,9 @@ TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_AllBad) { TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); std::string fstab_contents = R"fs( -source none0 swap defaults encryptable,forceencrypt,fileencryption,forcefdeorfbe,keydirectory,length,swapprio,zramsize,max_comp_streams,reservedsize,eraseblk,logicalblk,sysfs_path,zram_loopback_path,zram_loopback_size,zram_backing_dev_path +source none0 swap defaults encryptable,forceencrypt,fileencryption,forcefdeorfbe,keydirectory,length,swapprio,zramsize,max_comp_streams,reservedsize,eraseblk,logicalblk,sysfs_path,zram_backingdev_size -source none1 swap defaults encryptable=,forceencrypt=,fileencryption=,keydirectory=,length=,swapprio=,zramsize=,max_comp_streams=,avb=,reservedsize=,eraseblk=,logicalblk=,sysfs_path=,zram_loopback_path=,zram_loopback_size=,zram_backing_dev_path= +source none1 swap defaults encryptable=,forceencrypt=,fileencryption=,keydirectory=,length=,swapprio=,zramsize=,max_comp_streams=,avb=,reservedsize=,eraseblk=,logicalblk=,sysfs_path=,zram_backingdev_size= source none2 swap defaults forcefdeorfbe= @@ -425,9 +425,7 @@ source none2 swap defaults forcefdeorfbe= EXPECT_EQ(0, entry->erase_blk_size); EXPECT_EQ(0, entry->logical_blk_size); EXPECT_EQ("", entry->sysfs_path); - EXPECT_EQ("", entry->zram_loopback_path); - EXPECT_EQ(512U * 1024U * 1024U, entry->zram_loopback_size); - EXPECT_EQ("", entry->zram_backing_dev_path); + EXPECT_EQ(0U, entry->zram_backingdev_size); entry++; EXPECT_EQ("none1", entry->mount_point); @@ -453,9 +451,7 @@ source none2 swap defaults forcefdeorfbe= EXPECT_EQ(0, entry->erase_blk_size); EXPECT_EQ(0, entry->logical_blk_size); EXPECT_EQ("", entry->sysfs_path); - EXPECT_EQ("", entry->zram_loopback_path); - EXPECT_EQ(512U * 1024U * 1024U, entry->zram_loopback_size); - EXPECT_EQ("", entry->zram_backing_dev_path); + EXPECT_EQ(0U, entry->zram_backingdev_size); entry++; // forcefdeorfbe sets file_contents_mode and file_names_mode by default, so test it separately. @@ -1040,14 +1036,10 @@ TEST(fs_mgr, ReadFstabFromFile_FsMgrOptions_Zram) { TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); std::string fstab_contents = R"fs( -source none0 swap defaults zram_loopback_path=/dev/path - -source none1 swap defaults zram_loopback_size=blah -source none2 swap defaults zram_loopback_size=2 -source none3 swap defaults zram_loopback_size=1K -source none4 swap defaults zram_loopback_size=2m - -source none5 swap defaults zram_backing_dev_path=/dev/path2 +source none1 swap defaults zram_backingdev_size=blah +source none2 swap defaults zram_backingdev_size=2 +source none3 swap defaults zram_backingdev_size=1K +source none4 swap defaults zram_backingdev_size=2m )fs"; @@ -1055,29 +1047,23 @@ source none5 swap defaults zram_backing_dev_path=/dev/path2 Fstab fstab; EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab)); - ASSERT_EQ(6U, fstab.size()); + ASSERT_EQ(4U, fstab.size()); auto entry = fstab.begin(); - EXPECT_EQ("none0", entry->mount_point); - EXPECT_EQ("/dev/path", entry->zram_loopback_path); - entry++; EXPECT_EQ("none1", entry->mount_point); - EXPECT_EQ(512U * 1024U * 1024U, entry->zram_loopback_size); + EXPECT_EQ(0U, entry->zram_backingdev_size); entry++; EXPECT_EQ("none2", entry->mount_point); - EXPECT_EQ(2U, entry->zram_loopback_size); + EXPECT_EQ(2U, entry->zram_backingdev_size); entry++; EXPECT_EQ("none3", entry->mount_point); - EXPECT_EQ(1024U, entry->zram_loopback_size); + EXPECT_EQ(1024U, entry->zram_backingdev_size); entry++; EXPECT_EQ("none4", entry->mount_point); - EXPECT_EQ(2U * 1024U * 1024U, entry->zram_loopback_size); + EXPECT_EQ(2U * 1024U * 1024U, entry->zram_backingdev_size); entry++; - - EXPECT_EQ("none5", entry->mount_point); - EXPECT_EQ("/dev/path2", entry->zram_backing_dev_path); }