Skip to content

Commit

Permalink
Merge tag 'android-12.1.0_r8' of https://android.googlesource.com/pla…
Browse files Browse the repository at this point in the history
…tform/system/core into HEAD

Android 12.1.0 Release 8 (SQ3A.220605.009.B1)
  • Loading branch information
NurKeinNeid committed Jun 18, 2022
2 parents 1eb2884 + cae6aec commit af46bb3
Show file tree
Hide file tree
Showing 13 changed files with 386 additions and 180 deletions.
58 changes: 32 additions & 26 deletions fs_mgr/fs_mgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,22 @@ static bool should_force_check(int fs_stat) {
FS_STAT_SET_RESERVED_BLOCKS_FAILED | FS_STAT_ENABLE_ENCRYPTION_FAILED);
}

static bool umount_retry(const std::string& mount_point) {
int retry_count = 5;
bool umounted = false;

while (retry_count-- > 0) {
umounted = umount(mount_point.c_str()) == 0;
if (umounted) {
LINFO << __FUNCTION__ << "(): unmount(" << mount_point << ") succeeded";
break;
}
PERROR << __FUNCTION__ << "(): umount(" << mount_point << ") failed";
if (retry_count) sleep(1);
}
return umounted;
}

static void check_fs(const std::string& blk_device, const std::string& fs_type,
const std::string& target, int* fs_stat) {
int status;
Expand Down Expand Up @@ -212,25 +228,12 @@ static void check_fs(const std::string& blk_device, const std::string& fs_type,
tmpmnt_opts.c_str());
PINFO << __FUNCTION__ << "(): mount(" << blk_device << "," << target << "," << fs_type
<< ")=" << ret;
if (!ret) {
bool umounted = false;
int retry_count = 5;
while (retry_count-- > 0) {
umounted = umount(target.c_str()) == 0;
if (umounted) {
LINFO << __FUNCTION__ << "(): unmount(" << target << ") succeeded";
break;
}
PERROR << __FUNCTION__ << "(): umount(" << target << ") failed";
if (retry_count) sleep(1);
}
if (!umounted) {
// boot may fail but continue and leave it to later stage for now.
PERROR << __FUNCTION__ << "(): umount(" << target << ") timed out";
*fs_stat |= FS_STAT_RO_UNMOUNT_FAILED;
}
} else {
if (ret) {
*fs_stat |= FS_STAT_RO_MOUNT_FAILED;
} else if (!umount_retry(target)) {
// boot may fail but continue and leave it to later stage for now.
PERROR << __FUNCTION__ << "(): umount(" << target << ") timed out";
*fs_stat |= FS_STAT_RO_UNMOUNT_FAILED;
}
}

Expand Down Expand Up @@ -271,12 +274,12 @@ static void check_fs(const std::string& blk_device, const std::string& fs_type,
LINFO << "Running " << F2FS_FSCK_BIN << " -f -c 10000 --debug-cache "
<< realpath(blk_device);
ret = logwrap_fork_execvp(ARRAY_SIZE(f2fs_fsck_forced_argv), f2fs_fsck_forced_argv,
&status, false, LOG_KLOG | LOG_FILE, false, FSCK_LOG_FILE);
&status, false, LOG_KLOG | LOG_FILE, false, nullptr);
} else {
LINFO << "Running " << F2FS_FSCK_BIN << " -a -c 10000 --debug-cache "
<< realpath(blk_device);
ret = logwrap_fork_execvp(ARRAY_SIZE(f2fs_fsck_argv), f2fs_fsck_argv, &status, false,
LOG_KLOG | LOG_FILE, false, FSCK_LOG_FILE);
LOG_KLOG | LOG_FILE, false, nullptr);
}
if (ret < 0) {
/* No need to check for error in fork, we can't really handle it now */
Expand Down Expand Up @@ -1034,12 +1037,11 @@ static int handle_encryptable(const FstabEntry& entry) {
return FS_MGR_MNTALL_DEV_NOT_ENCRYPTED;
}
} else if (should_use_metadata_encryption(entry)) {
if (umount(entry.mount_point.c_str()) == 0) {
if (umount_retry(entry.mount_point)) {
return FS_MGR_MNTALL_DEV_NEEDS_METADATA_ENCRYPTION;
} else {
PERROR << "Could not umount " << entry.mount_point << " - fail since can't encrypt";
return FS_MGR_MNTALL_FAIL;
}
PERROR << "Could not umount " << entry.mount_point << " - fail since can't encrypt";
return FS_MGR_MNTALL_FAIL;
} else if (entry.fs_mgr_flags.file_encryption || entry.fs_mgr_flags.force_fde_or_fbe) {
LINFO << entry.mount_point << " is file encrypted";
return FS_MGR_MNTALL_DEV_FILE_ENCRYPTED;
Expand Down Expand Up @@ -1885,9 +1887,13 @@ int fs_mgr_do_mount_one(const FstabEntry& entry, const std::string& alt_mount_po
auto& mount_point = alt_mount_point.empty() ? entry.mount_point : alt_mount_point;

// Run fsck if needed
prepare_fs_for_mount(entry.blk_device, entry, mount_point);
int ret = prepare_fs_for_mount(entry.blk_device, entry, mount_point);
// Wiped case doesn't require to try __mount below.
if (ret & FS_STAT_INVALID_MAGIC) {
return FS_MGR_DOMNT_FAILED;
}

int ret = __mount(entry.blk_device, mount_point, entry);
ret = __mount(entry.blk_device, mount_point, entry);
if (ret) {
ret = (errno == EBUSY) ? FS_MGR_DOMNT_BUSY : FS_MGR_DOMNT_FAILED;
}
Expand Down
7 changes: 6 additions & 1 deletion fs_mgr/fs_mgr_overlayfs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -866,9 +866,14 @@ bool fs_mgr_overlayfs_mount_scratch(const std::string& device_path, const std::s
errno = save_errno;
}
entry.flags &= ~MS_RDONLY;
entry.flags |= MS_SYNCHRONOUS;
entry.fs_options = "nodiscard";
fs_mgr_set_blk_ro(device_path, false);
}
entry.fs_mgr_flags.check = true;
// check_fs requires apex runtime library
if (fs_mgr_overlayfs_already_mounted("/data", false)) {
entry.fs_mgr_flags.check = true;
}
auto save_errno = errno;
if (mounted) mounted = fs_mgr_do_mount_one(entry) == 0;
if (!mounted) {
Expand Down
1 change: 1 addition & 0 deletions libcutils/fs_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ static const struct fs_path_config android_files[] = {
{ 00755, AID_ROOT, AID_ROOT, 0, "first_stage_ramdisk/system/bin/resize2fs" },
{ 00755, AID_ROOT, AID_ROOT, 0, "first_stage_ramdisk/system/bin/snapuserd" },
{ 00755, AID_ROOT, AID_ROOT, 0, "first_stage_ramdisk/system/bin/tune2fs" },
{ 00755, AID_ROOT, AID_ROOT, 0, "first_stage_ramdisk/system/bin/fsck.f2fs" },
// generic defaults
{ 00755, AID_ROOT, AID_ROOT, 0, "bin/*" },
{ 00640, AID_ROOT, AID_SHELL, 0, "fstab.*" },
Expand Down
2 changes: 2 additions & 0 deletions libprocessgroup/include/processgroup/processgroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ bool SetProcessProfiles(uid_t uid, pid_t pid, const std::vector<std::string>& pr

#ifndef __ANDROID_VNDK__

bool SetProcessProfilesCached(uid_t uid, pid_t pid, const std::vector<std::string>& profiles);

static constexpr const char* CGROUPS_RC_PATH = "/dev/cgroup_info/cgroup.rc";

bool UsePerAppMemcg();
Expand Down
9 changes: 7 additions & 2 deletions libprocessgroup/processgroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,16 @@ static bool isMemoryCgroupSupported() {
}

void DropTaskProfilesResourceCaching() {
TaskProfiles::GetInstance().DropResourceCaching();
TaskProfiles::GetInstance().DropResourceCaching(ProfileAction::RCT_TASK);
TaskProfiles::GetInstance().DropResourceCaching(ProfileAction::RCT_PROCESS);
}

bool SetProcessProfiles(uid_t uid, pid_t pid, const std::vector<std::string>& profiles) {
return TaskProfiles::GetInstance().SetProcessProfiles(uid, pid, profiles);
return TaskProfiles::GetInstance().SetProcessProfiles(uid, pid, profiles, false);
}

bool SetProcessProfilesCached(uid_t uid, pid_t pid, const std::vector<std::string>& profiles) {
return TaskProfiles::GetInstance().SetProcessProfiles(uid, pid, profiles, true);
}

bool SetTaskProfiles(int tid, const std::vector<std::string>& profiles, bool use_fd_cache) {
Expand Down
Loading

0 comments on commit af46bb3

Please sign in to comment.