fs_mgr: overlayfs: ReadFstabFromFile touches errno
(cherry picked from commit98a0128e44
) Regression from commit77c28476f1
("Remove the mount points defined in skip_mount.cfg from ReadDefaultFstab()") resulted in ReadFstabFromFile to report errno ENOENT even upon success, preventing clear error propagation for real failures (ReadFstabFromFile would _always_ report ENOENT). The bad error propagation resulted in an adb remount failure. Added immunization against future adjustments that may also result in a similar regression in adb remount behaviors. Test: adb-remount-test.sh Bug: 132594161 Bug: 128961335 Change-Id: Icf5d48bbfc6d938d4b9657ca8004a6a6ddaab5a6
This commit is contained in:
parent
122bf2aedf
commit
8471f92a20
|
@ -704,7 +704,9 @@ bool SkipMountingPartitions(Fstab* fstab) {
|
|||
constexpr const char kSkipMountConfig[] = "/system/etc/init/config/skip_mount.cfg";
|
||||
|
||||
std::string skip_config;
|
||||
auto save_errno = errno;
|
||||
if (!ReadFileToString(kSkipMountConfig, &skip_config)) {
|
||||
errno = save_errno; // missing file is expected
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,11 @@ bool fs_mgr_filesystem_has_space(const std::string& mount_point) {
|
|||
// If we have access issues to find out space remaining, return true
|
||||
// to prevent us trying to override with overlayfs.
|
||||
struct statvfs vst;
|
||||
if (statvfs(mount_point.c_str(), &vst)) return true;
|
||||
auto save_errno = errno;
|
||||
if (statvfs(mount_point.c_str(), &vst)) {
|
||||
errno = save_errno;
|
||||
return true;
|
||||
}
|
||||
|
||||
static constexpr int kPercentThreshold = 1; // 1%
|
||||
|
||||
|
@ -265,9 +269,11 @@ bool fs_mgr_rw_access(const std::string& path) {
|
|||
|
||||
bool fs_mgr_overlayfs_already_mounted(const std::string& mount_point, bool overlay_only = true) {
|
||||
Fstab fstab;
|
||||
auto save_errno = errno;
|
||||
if (!ReadFstabFromFile("/proc/mounts", &fstab)) {
|
||||
return false;
|
||||
}
|
||||
errno = save_errno;
|
||||
const auto lowerdir = kLowerdirOption + mount_point;
|
||||
for (const auto& entry : fstab) {
|
||||
if (overlay_only && "overlay" != entry.fs_type && "overlayfs" != entry.fs_type) continue;
|
||||
|
|
Loading…
Reference in New Issue