Merge "reupload: libsnapshot: set thread priority" into main
diff --git a/fs_mgr/fs_mgr_overlayfs_mount.cpp b/fs_mgr/fs_mgr_overlayfs_mount.cpp
index a1ec63b..bd0fcfd 100644
--- a/fs_mgr/fs_mgr_overlayfs_mount.cpp
+++ b/fs_mgr/fs_mgr_overlayfs_mount.cpp
@@ -412,6 +412,8 @@
bool retval = true;
bool move_dir_shared = true;
bool parent_shared = true;
+ bool parent_have_parent = false;
+ bool parent_made_private = false;
bool root_shared = true;
bool root_made_private = false;
@@ -443,6 +445,10 @@
if (entry.mount_point == "/") {
root_shared = entry.shared_flag;
}
+ // Ignore "/" as we don't overlay "/" directly.
+ if (entry.mount_point != "/") {
+ parent_have_parent |= android::base::StartsWith(mount_point, entry.mount_point + "/");
+ }
}
// Precondition is that kMoveMountTempDir is MS_PRIVATE, otherwise don't try to move any
@@ -453,11 +459,13 @@
// Need to make the original mountpoint MS_PRIVATE, so that the overlayfs can be MS_MOVE.
// This could happen if its parent mount is remounted later.
- if (!fs_mgr_overlayfs_set_shared_mount(mount_point, false)) {
- // If failed to set "/system" mount type, it might be due to "/system" not being a valid
- // mountpoint after switch root. Retry with "/" in this case.
- if (errno == EINVAL && mount_point == "/system") {
- root_made_private = fs_mgr_overlayfs_set_shared_mount("/", false);
+ if (parent_have_parent) {
+ parent_made_private |= fs_mgr_overlayfs_set_shared_mount(mount_point, false);
+ if (!parent_made_private && errno == EINVAL && mount_point == "/system") {
+ // If failed to set "/system" mount type, it might be due to "/system" not being a valid
+ // mountpoint after switch root. Retry with "/" in this case.
+ parent_made_private |= fs_mgr_overlayfs_set_shared_mount("/", false);
+ root_made_private |= parent_made_private;
}
}
@@ -496,6 +504,15 @@
continue;
}
}
+ if (!parent_made_private) {
+ parent_made_private |= fs_mgr_overlayfs_set_shared_mount(mount_point, false);
+ if (!parent_made_private && errno == EINVAL && mount_point == "/system") {
+ // If failed to set "/system" mount type, it might be due to "/system" not being a
+ // valid mountpoint after switch root. Retry with "/" in this case.
+ parent_made_private |= fs_mgr_overlayfs_set_shared_mount("/", false);
+ root_made_private |= parent_made_private;
+ }
+ }
if (new_entry.shared_flag) {
new_entry.shared_flag = fs_mgr_overlayfs_set_shared_mount(new_entry.mount_point, false);
@@ -524,7 +541,7 @@
rmdir(entry.dir.c_str());
}
// If the original (overridden) mount was MS_SHARED, then set the overlayfs mount to MS_SHARED.
- if (parent_shared) {
+ if (parent_shared && parent_made_private) {
fs_mgr_overlayfs_set_shared_mount(mount_point, true);
}
if (root_shared && root_made_private) {
diff --git a/init/Android.bp b/init/Android.bp
index 57e5a68..6526a93 100644
--- a/init/Android.bp
+++ b/init/Android.bp
@@ -162,7 +162,7 @@
},
release_write_appcompat_override_system_properties: {
cflags: ["-DWRITE_APPCOMPAT_OVERRIDE_SYSTEM_PROPERTIES"],
- }
+ },
},
static_libs: [
"libavb",
@@ -663,3 +663,23 @@
src: "extra_free_kbytes.sh",
filename_from_src: true,
}
+
+soong_config_module_type {
+ name: "board_use_recovery_as_boot_phony",
+ module_type: "phony",
+ config_namespace: "ANDROID",
+ bool_variables: ["BOARD_USES_RECOVERY_AS_BOOT"],
+ properties: ["required"],
+}
+
+board_use_recovery_as_boot_phony {
+ name: "init_vendor",
+ soong_config_variables: {
+ BOARD_USES_RECOVERY_AS_BOOT: {
+ required: [],
+ conditions_default: {
+ required: ["init_first_stage"],
+ },
+ },
+ },
+}
diff --git a/init/Android.mk b/init/Android.mk
deleted file mode 100644
index 4b85c15..0000000
--- a/init/Android.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2005 The Android Open Source Project
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := init_vendor
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
-ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),true)
-LOCAL_REQUIRED_MODULES := \
- init_first_stage \
-
-endif # BOARD_USES_RECOVERY_AS_BOOT
-include $(BUILD_PHONY_PACKAGE)
diff --git a/init/apex_init_util.cpp b/init/apex_init_util.cpp
index 6d17f36..e5a7fbc 100644
--- a/init/apex_init_util.cpp
+++ b/init/apex_init_util.cpp
@@ -107,8 +107,9 @@
}
// APEXes can have versioned RC files. These should be filtered based on
// SDK version.
- auto filtered = FilterVersionedConfigs(
- files, android::base::GetIntProperty("ro.build.version.sdk", INT_MAX));
+ int sdk = android::base::GetIntProperty("ro.build.version.sdk", INT_MAX);
+ if (sdk < 35) sdk = 35; // aosp/main merges only into sdk=35+ (ie. __ANDROID_API_V__+)
+ auto filtered = FilterVersionedConfigs(files, sdk);
if (filtered.empty()) {
return {};
}