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

Commit 9dec93bf authored by Nick Kralevich's avatar Nick Kralevich
Browse files

init: don't double mount /proc and /sys

The first stage init mounts /proc and /sys, and then the second
stage init also mounts /proc and /sys on top of the existing mount.
Only mount these two directories once, in the first stage init.

Not yet fixed: the double mounting of /dev. Removing the double
mounting doesn't work right now because both init stages are trying
to create a property space, and if the double mount of /dev goes away,
the property service in the second stage init fails to work.

Change-Id: I13719027a47526d074390c2b1a605ad99fb43a8f
parent 8929c77a
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -983,14 +983,20 @@ int main(int argc, char** argv) {


    add_environment("PATH", _PATH_DEFPATH);
    add_environment("PATH", _PATH_DEFPATH);


    bool is_first_stage = (argc == 1) || (strcmp(argv[1], "--second-stage") != 0);

    // Get the basic filesystem setup we need put together in the initramdisk
    // Get the basic filesystem setup we need put together in the initramdisk
    // on / and then we'll let the rc file figure out the rest.
    // on / and then we'll let the rc file figure out the rest.
    // TODO: avoid mounting tmpfs twice, once in the first stage, and once in the
    // second stage.
    mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755");
    mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755");
    mkdir("/dev/pts", 0755);
    mkdir("/dev/pts", 0755);
    mkdir("/dev/socket", 0755);
    mkdir("/dev/socket", 0755);
    mount("devpts", "/dev/pts", "devpts", 0, NULL);
    mount("devpts", "/dev/pts", "devpts", 0, NULL);
    if (is_first_stage) {
        mount("proc", "/proc", "proc", 0, NULL);
        mount("proc", "/proc", "proc", 0, NULL);
        mount("sysfs", "/sys", "sysfs", 0, NULL);
        mount("sysfs", "/sys", "sysfs", 0, NULL);
    }


    // Indicate that booting is in progress to background fw loaders, etc.
    // Indicate that booting is in progress to background fw loaders, etc.
    close(open("/dev/.booting", O_WRONLY | O_CREAT | O_CLOEXEC, 0000));
    close(open("/dev/.booting", O_WRONLY | O_CREAT | O_CLOEXEC, 0000));
@@ -1003,7 +1009,6 @@ int main(int argc, char** argv) {
    klog_init();
    klog_init();
    klog_set_level(KLOG_NOTICE_LEVEL);
    klog_set_level(KLOG_NOTICE_LEVEL);


    bool is_first_stage = (argc == 1) || (strcmp(argv[1], "--second-stage") != 0);
    NOTICE("init%s started!\n", is_first_stage ? "" : " second stage");
    NOTICE("init%s started!\n", is_first_stage ? "" : " second stage");


    property_init();
    property_init();