Merge "fs_mgr: remove configurable zram backing file path"

This commit is contained in:
Minchan Kim 2019-10-29 05:13:50 +00:00 committed by Android (Google) Code Review
commit 59813afdaf
4 changed files with 26 additions and 50 deletions

View file

@ -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

View file

@ -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;
}

View file

@ -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 {

View file

@ -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);
}