Loading init/builtins.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -1173,6 +1173,10 @@ static Result<void> do_remount_userdata(const BuiltinArguments& args) { } // TODO(b/135984674): check that fstab contains /data. if (auto rc = fs_mgr_remount_userdata_into_checkpointing(&fstab); rc < 0) { std::string proc_mounts_output; android::base::ReadFileToString("/proc/mounts", &proc_mounts_output, true); android::base::WriteStringToFile(proc_mounts_output, "/metadata/userspacereboot/mount_info.txt"); trigger_shutdown("reboot,mount_userdata_failed"); } if (auto result = queue_fs_event(initial_mount_fstab_return_code, true); !result.ok()) { Loading init/reboot.cpp +16 −2 Original line number Diff line number Diff line Loading @@ -804,11 +804,19 @@ static Result<void> DoUserspaceReboot() { auto sigkill_timeout = GetMillisProperty("init.userspace_reboot.sigkill.timeoutmillis", 10s); LOG(INFO) << "Timeout to terminate services: " << sigterm_timeout.count() << "ms " << "Timeout to kill services: " << sigkill_timeout.count() << "ms"; std::string services_file_name = "/metadata/userspacereboot/services.txt"; const int flags = O_RDWR | O_CREAT | O_SYNC | O_APPEND | O_CLOEXEC; StopServicesAndLogViolations(stop_first, sigterm_timeout, true /* SIGTERM */); if (int r = StopServicesAndLogViolations(stop_first, sigkill_timeout, false /* SIGKILL */); r > 0) { auto fd = unique_fd(TEMP_FAILURE_RETRY(open(services_file_name.c_str(), flags, 0666))); android::base::WriteStringToFd("Post-data services still running: \n", fd); for (const auto& s : stop_first) { if (s->IsRunning()) { android::base::WriteStringToFd(s->name() + "\n", fd); } } sub_reason = "sigkill"; // TODO(b/135984674): store information about offending services for debugging. return Error() << r << " post-data services are still running"; } if (auto result = KillZramBackingDevice(); !result.ok()) { Loading @@ -822,8 +830,14 @@ static Result<void> DoUserspaceReboot() { if (int r = StopServicesAndLogViolations(GetDebuggingServices(true /* only_post_data */), sigkill_timeout, false /* SIGKILL */); r > 0) { auto fd = unique_fd(TEMP_FAILURE_RETRY(open(services_file_name.c_str(), flags, 0666))); android::base::WriteStringToFd("Debugging services still running: \n", fd); for (const auto& s : GetDebuggingServices(true)) { if (s->IsRunning()) { android::base::WriteStringToFd(s->name() + "\n", fd); } } sub_reason = "sigkill_debug"; // TODO(b/135984674): store information about offending services for debugging. return Error() << r << " debugging services are still running"; } { Loading rootdir/init.rc +1 −0 Original line number Diff line number Diff line Loading @@ -510,6 +510,7 @@ on post-fs mkdir /metadata/bootstat 0750 system log mkdir /metadata/ota 0700 root system mkdir /metadata/ota/snapshots 0700 root system mkdir /metadata/userspacereboot 0770 root system mkdir /metadata/apex 0700 root system mkdir /metadata/apex/sessions 0700 root system Loading Loading
init/builtins.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -1173,6 +1173,10 @@ static Result<void> do_remount_userdata(const BuiltinArguments& args) { } // TODO(b/135984674): check that fstab contains /data. if (auto rc = fs_mgr_remount_userdata_into_checkpointing(&fstab); rc < 0) { std::string proc_mounts_output; android::base::ReadFileToString("/proc/mounts", &proc_mounts_output, true); android::base::WriteStringToFile(proc_mounts_output, "/metadata/userspacereboot/mount_info.txt"); trigger_shutdown("reboot,mount_userdata_failed"); } if (auto result = queue_fs_event(initial_mount_fstab_return_code, true); !result.ok()) { Loading
init/reboot.cpp +16 −2 Original line number Diff line number Diff line Loading @@ -804,11 +804,19 @@ static Result<void> DoUserspaceReboot() { auto sigkill_timeout = GetMillisProperty("init.userspace_reboot.sigkill.timeoutmillis", 10s); LOG(INFO) << "Timeout to terminate services: " << sigterm_timeout.count() << "ms " << "Timeout to kill services: " << sigkill_timeout.count() << "ms"; std::string services_file_name = "/metadata/userspacereboot/services.txt"; const int flags = O_RDWR | O_CREAT | O_SYNC | O_APPEND | O_CLOEXEC; StopServicesAndLogViolations(stop_first, sigterm_timeout, true /* SIGTERM */); if (int r = StopServicesAndLogViolations(stop_first, sigkill_timeout, false /* SIGKILL */); r > 0) { auto fd = unique_fd(TEMP_FAILURE_RETRY(open(services_file_name.c_str(), flags, 0666))); android::base::WriteStringToFd("Post-data services still running: \n", fd); for (const auto& s : stop_first) { if (s->IsRunning()) { android::base::WriteStringToFd(s->name() + "\n", fd); } } sub_reason = "sigkill"; // TODO(b/135984674): store information about offending services for debugging. return Error() << r << " post-data services are still running"; } if (auto result = KillZramBackingDevice(); !result.ok()) { Loading @@ -822,8 +830,14 @@ static Result<void> DoUserspaceReboot() { if (int r = StopServicesAndLogViolations(GetDebuggingServices(true /* only_post_data */), sigkill_timeout, false /* SIGKILL */); r > 0) { auto fd = unique_fd(TEMP_FAILURE_RETRY(open(services_file_name.c_str(), flags, 0666))); android::base::WriteStringToFd("Debugging services still running: \n", fd); for (const auto& s : GetDebuggingServices(true)) { if (s->IsRunning()) { android::base::WriteStringToFd(s->name() + "\n", fd); } } sub_reason = "sigkill_debug"; // TODO(b/135984674): store information about offending services for debugging. return Error() << r << " debugging services are still running"; } { Loading
rootdir/init.rc +1 −0 Original line number Diff line number Diff line Loading @@ -510,6 +510,7 @@ on post-fs mkdir /metadata/bootstat 0750 system log mkdir /metadata/ota 0700 root system mkdir /metadata/ota/snapshots 0700 root system mkdir /metadata/userspacereboot 0770 root system mkdir /metadata/apex 0700 root system mkdir /metadata/apex/sessions 0700 root system Loading