Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0d11aa7 authored by Gavin Corkery's avatar Gavin Corkery Committed by Gerrit Code Review
Browse files

Merge "Store userspace reboot info in /metadata"

parents 58c10b77 8c92256d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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()) {
+16 −2
Original line number Diff line number Diff line
@@ -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()) {
@@ -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";
    }
    {
+1 −0
Original line number Diff line number Diff line
@@ -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