Merge "Add libcutils_test into TEST_MAPPING"
diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp
index a8059b7..75ebd94 100644
--- a/fs_mgr/fs_mgr.cpp
+++ b/fs_mgr/fs_mgr.cpp
@@ -1407,9 +1407,8 @@
return -1;
}
} else {
- // TODO(b/135984674): support remounting for ext4.
- LERROR << "Remounting in checkpointing mode is not yet supported for ext4";
- return -1;
+ // STOPSHIP(b/143970043): support remounting for ext4.
+ LWARNING << "Remounting into checkpointing is not supported for ex4. Proceed with caution";
}
return 0;
}
diff --git a/init/reboot.cpp b/init/reboot.cpp
index fc18ecb..4a16969 100644
--- a/init/reboot.cpp
+++ b/init/reboot.cpp
@@ -57,6 +57,7 @@
#include "action_manager.h"
#include "builtin_arguments.h"
#include "init.h"
+#include "mount_namespace.h"
#include "property_service.h"
#include "reboot_utils.h"
#include "service.h"
@@ -713,6 +714,18 @@
SendStartSendingMessagesMessage();
}
+static Result<void> UnmountAllApexes() {
+ const char* args[] = {"/system/bin/apexd", "--unmount-all"};
+ int status;
+ if (logwrap_fork_execvp(arraysize(args), args, &status, false, LOG_KLOG, true, nullptr) != 0) {
+ return ErrnoError() << "Failed to call '/system/bin/apexd --unmount-all'";
+ }
+ if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
+ return {};
+ }
+ return Error() << "'/system/bin/apexd --unmount-all' failed : " << status;
+}
+
static Result<void> DoUserspaceReboot() {
LOG(INFO) << "Userspace reboot initiated";
auto guard = android::base::make_scope_guard([] {
@@ -746,30 +759,20 @@
// TODO(b/135984674): store information about offending services for debugging.
return Error() << r << " post-data services are still running";
}
- // We only really need to restart vold if userdata is ext4 filesystem.
- // TODO(b/135984674): get userdata fs type here, and do nothing in case of f2fs.
- // First shutdown volumes managed by vold. They will be recreated by
- // system_server.
- Service* vold_service = ServiceList::GetInstance().FindService("vold");
- if (vold_service != nullptr && vold_service->IsRunning()) {
- if (auto result = ShutdownVold(); !result) {
- return result;
- }
- LOG(INFO) << "Restarting vold";
- vold_service->Restart();
- }
- // Again, we only need to kill zram backing device in case of ext4 userdata.
- // TODO(b/135984674): get userdata fs type here, and do nothing in case of f2fs.
- if (auto result = KillZramBackingDevice(); !result) {
- return result;
- }
+ // TODO(b/143970043): in case of ext4 we probably we will need to restart vold and kill zram
+ // backing device.
if (int r = StopServicesAndLogViolations(GetDebuggingServices(true /* only_post_data */), 5s,
false /* SIGKILL */);
r > 0) {
// TODO(b/135984674): store information about offending services for debugging.
return Error() << r << " debugging services are still running";
}
- // TODO(b/135984674): deactivate APEX modules and switch back to bootstrap namespace.
+ if (auto result = UnmountAllApexes(); !result) {
+ return result;
+ }
+ if (!SwitchToBootstrapMountNamespaceIfNeeded()) {
+ return Error() << "Failed to switch to bootstrap namespace";
+ }
// Re-enable services
for (const auto& s : were_enabled) {
LOG(INFO) << "Re-enabling service '" << s->name() << "'";
diff --git a/libcutils/fs_config.cpp b/libcutils/fs_config.cpp
index 5fb11a5..2b39ca6 100644
--- a/libcutils/fs_config.cpp
+++ b/libcutils/fs_config.cpp
@@ -85,6 +85,7 @@
{ 00755, AID_ROOT, AID_SHELL, 0, "system/vendor" },
{ 00751, AID_ROOT, AID_SHELL, 0, "system/xbin" },
{ 00751, AID_ROOT, AID_SHELL, 0, "system/apex/*/bin" },
+ { 00751, AID_ROOT, AID_SHELL, 0, "system_ext/bin" },
{ 00751, AID_ROOT, AID_SHELL, 0, "vendor/bin" },
{ 00755, AID_ROOT, AID_SHELL, 0, "vendor" },
{ 00755, AID_ROOT, AID_ROOT, 0, 0 },
@@ -207,6 +208,7 @@
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/*" },
{ 00755, AID_ROOT, AID_SHELL, 0, "system/xbin/*" },
{ 00755, AID_ROOT, AID_SHELL, 0, "system/apex/*/bin/*" },
+ { 00755, AID_ROOT, AID_SHELL, 0, "system_ext/bin/*" },
{ 00755, AID_ROOT, AID_SHELL, 0, "vendor/bin/*" },
{ 00755, AID_ROOT, AID_SHELL, 0, "vendor/xbin/*" },
{ 00644, AID_ROOT, AID_ROOT, 0, 0 },
diff --git a/rootdir/init.rc b/rootdir/init.rc
index 66d60fa..a8e0f5f 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -924,7 +924,7 @@
setprop sys.init.userspace_reboot_in_progress 1
setprop sys.boot_completed 0
setprop sys.init.updatable_crashing 0
- setprop apexd.status 0
+ setprop apexd.status ""
on userspace-reboot-fs-remount
# Make sure that vold is running.