Add zoned device support
Format f2fs zoned device. Bug: 172378121 Signed-off-by: Jaegeuk Kim <jaegeuk@google.com> Change-Id: Ic7f564ce5786c635ee1e1f6d0b33c1f4d08f780a
This commit is contained in:
parent
ac9b59ed5a
commit
e67e570028
4 changed files with 23 additions and 7 deletions
|
@ -1485,7 +1485,7 @@ MountAllResult fs_mgr_mount_all(Fstab* fstab, int mount_mode) {
|
|||
if (status == FS_MGR_MNTALL_DEV_NEEDS_METADATA_ENCRYPTION) {
|
||||
if (!call_vdc({"cryptfs", "encryptFstab", attempted_entry.blk_device,
|
||||
attempted_entry.mount_point, wiped ? "true" : "false",
|
||||
attempted_entry.fs_type},
|
||||
attempted_entry.fs_type, attempted_entry.zoned_device},
|
||||
nullptr)) {
|
||||
LERROR << "Encryption failed";
|
||||
set_type_property(encryptable);
|
||||
|
@ -1525,7 +1525,7 @@ MountAllResult fs_mgr_mount_all(Fstab* fstab, int mount_mode) {
|
|||
|
||||
if (!call_vdc({"cryptfs", "encryptFstab", current_entry.blk_device,
|
||||
current_entry.mount_point, "true" /* shouldFormat */,
|
||||
current_entry.fs_type},
|
||||
current_entry.fs_type, current_entry.zoned_device},
|
||||
nullptr)) {
|
||||
LERROR << "Encryption failed";
|
||||
} else {
|
||||
|
@ -1550,7 +1550,7 @@ MountAllResult fs_mgr_mount_all(Fstab* fstab, int mount_mode) {
|
|||
if (mount_errno != EBUSY && mount_errno != EACCES &&
|
||||
should_use_metadata_encryption(attempted_entry)) {
|
||||
if (!call_vdc({"cryptfs", "mountFstab", attempted_entry.blk_device,
|
||||
attempted_entry.mount_point},
|
||||
attempted_entry.mount_point, attempted_entry.zoned_device},
|
||||
nullptr)) {
|
||||
++error_count;
|
||||
} else if (current_entry.mount_point == "/data") {
|
||||
|
|
|
@ -117,7 +117,7 @@ static int format_ext4(const std::string& fs_blkdev, const std::string& fs_mnt_p
|
|||
}
|
||||
|
||||
static int format_f2fs(const std::string& fs_blkdev, uint64_t dev_sz, bool needs_projid,
|
||||
bool needs_casefold, bool fs_compress) {
|
||||
bool needs_casefold, bool fs_compress, const std::string& zoned_device) {
|
||||
if (!dev_sz) {
|
||||
int rc = get_dev_sz(fs_blkdev, &dev_sz);
|
||||
if (rc) {
|
||||
|
@ -146,8 +146,15 @@ static int format_f2fs(const std::string& fs_blkdev, uint64_t dev_sz, bool needs
|
|||
args.push_back("-O");
|
||||
args.push_back("extra_attr");
|
||||
}
|
||||
args.push_back(fs_blkdev.c_str());
|
||||
args.push_back(size_str.c_str());
|
||||
if (!zoned_device.empty()) {
|
||||
args.push_back("-c");
|
||||
args.push_back(zoned_device.c_str());
|
||||
args.push_back("-m");
|
||||
args.push_back(fs_blkdev.c_str());
|
||||
} else {
|
||||
args.push_back(fs_blkdev.c_str());
|
||||
args.push_back(size_str.c_str());
|
||||
}
|
||||
|
||||
return logwrap_fork_execvp(args.size(), args.data(), nullptr, false, LOG_KLOG, false, nullptr);
|
||||
}
|
||||
|
@ -164,7 +171,7 @@ int fs_mgr_do_format(const FstabEntry& entry) {
|
|||
|
||||
if (entry.fs_type == "f2fs") {
|
||||
return format_f2fs(entry.blk_device, entry.length, needs_projid, needs_casefold,
|
||||
entry.fs_mgr_flags.fs_compress);
|
||||
entry.fs_mgr_flags.fs_compress, entry.zoned_device);
|
||||
} else if (entry.fs_type == "ext4") {
|
||||
return format_ext4(entry.blk_device, entry.mount_point, needs_projid,
|
||||
entry.fs_mgr_flags.ext_meta_csum);
|
||||
|
|
|
@ -304,6 +304,14 @@ bool ParseFsMgrFlags(const std::string& flags, FstabEntry* entry) {
|
|||
if (!ParseByteCount(arg, &entry->zram_backingdev_size)) {
|
||||
LWARNING << "Warning: zram_backingdev_size= flag malformed: " << arg;
|
||||
}
|
||||
} else if (StartsWith(flag, "zoned_device=")) {
|
||||
std::string zoned;
|
||||
if (ReadFileToString("/sys/class/block/" + arg + "/queue/zoned", &zoned) &&
|
||||
android::base::StartsWith(zoned, "host-managed")) {
|
||||
entry->zoned_device = "/dev/block/" + arg;
|
||||
} else {
|
||||
LWARNING << "Warning: cannot find the zoned device: " << arg;
|
||||
}
|
||||
} else {
|
||||
LWARNING << "Warning: unknown flag: " << flag;
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ namespace fs_mgr {
|
|||
|
||||
struct FstabEntry {
|
||||
std::string blk_device;
|
||||
std::string zoned_device;
|
||||
std::string logical_partition_name;
|
||||
std::string mount_point;
|
||||
std::string fs_type;
|
||||
|
|
Loading…
Reference in a new issue