diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp index 6faead0bc..328169092 100644 --- a/fs_mgr/fs_mgr.cpp +++ b/fs_mgr/fs_mgr.cpp @@ -1561,12 +1561,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))); @@ -1582,13 +1580,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; } @@ -1624,11 +1622,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 d216458d8..534eae460 100644 --- a/fs_mgr/fs_mgr_fstab.cpp +++ b/fs_mgr/fs_mgr_fstab.cpp @@ -279,15 +279,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 c6a16e375..6ce616085 100644 --- a/fs_mgr/include_fstab/fstab/fstab.h +++ b/fs_mgr/include_fstab/fstab/fstab.h @@ -50,9 +50,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 05607a0f3..10d0373c0 100644 --- a/fs_mgr/tests/fs_mgr_test.cpp +++ b/fs_mgr/tests/fs_mgr_test.cpp @@ -393,9 +393,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); @@ -452,9 +450,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 has its own encryption_options defaults, so test it separately. @@ -921,14 +917,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"; @@ -936,29 +928,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); }