From: Fotis Xenakis <fo...@windowslive.com>
Committer: Waldemar Kozaczuk <jwkozac...@gmail.com>
Branch: master

vfs: homogenize mount_rofs_rootfs and mount_zfs_rootfs

Signed-off-by: Fotis Xenakis <fo...@windowslive.com>
Message-Id: 
<am0pr03mb6292abec8fc7c3a24e86fc85a6...@am0pr03mb6292.eurprd03.prod.outlook.com>

---
diff --git a/fs/vfs/main.cc b/fs/vfs/main.cc
--- a/fs/vfs/main.cc
+++ b/fs/vfs/main.cc
@@ -1593,7 +1593,7 @@ int faccessat(int dirfd, const char *pathname, int mode, 
int flags)
     return error;
 }
 
-extern "C" 
+extern "C"
 int euidaccess(const char *pathname, int mode)
 {
     return access(pathname, mode);
@@ -2375,45 +2375,53 @@ extern "C" void unmount_devfs()
 
 extern "C" int mount_rofs_rootfs(bool pivot_root)
 {
-    int ret;
-
-    if (mkdir("/rofs", 0755) < 0)
-        kprintf("failed to create /rofs, error = %s\n", strerror(errno));
+    constexpr char* mp = "/rofs";
 
-    ret = sys_mount("/dev/vblk0.1", "/rofs", "rofs", MNT_RDONLY, 0);
+    if (mkdir(mp, 0755) < 0) {
+        int ret = errno;
+        kprintf("failed to create %s, error = %s\n", mp, strerror(errno));
+        return ret;
+    }
 
+    int ret = sys_mount("/dev/vblk0.1", mp, "rofs", MNT_RDONLY, nullptr);
     if (ret) {
-        kprintf("failed to mount /rofs, error = %s\n", strerror(ret));
-        rmdir("/rofs");
+        kprintf("failed to mount %s, error = %s\n", mp, strerror(ret));
+        rmdir(mp);
         return ret;
     }
 
     if (pivot_root) {
-        pivot_rootfs("/rofs");
+        pivot_rootfs(mp);
     }
 
     return 0;
 }
 
-extern "C" void mount_zfs_rootfs(bool pivot_root, bool extra_zfs_pools)
+extern "C" int mount_zfs_rootfs(bool pivot_root, bool extra_zfs_pools)
 {
-    if (mkdir("/zfs", 0755) < 0)
-        kprintf("failed to create /zfs, error = %s\n", strerror(errno));
+    constexpr char* mp = "/zfs";
 
-    int ret = sys_mount("/dev/vblk0.1", "/zfs", "zfs", 0, (void *)"osv/zfs");
-
-    if (ret)
-        kprintf("failed to mount /zfs, error = %s\n", strerror(ret));
-
-    if (!pivot_root) {
-        return;
+    if (mkdir(mp, 0755) < 0) {
+        int ret = errno;
+        kprintf("failed to create %s, error = %s\n", mp, strerror(errno));
+        return ret;
     }
 
-    pivot_rootfs("/zfs");
+    int ret = sys_mount("/dev/vblk0.1", mp, "zfs", 0, (void *)"osv/zfs");
+    if (ret) {
+        kprintf("failed to mount %s, error = %s\n", mp, strerror(ret));
+        rmdir(mp);
+        return ret;
+    }
 
-    if (extra_zfs_pools) {
-        import_extra_zfs_pools();
+    if (pivot_root) {
+        pivot_rootfs(mp);
+        if (extra_zfs_pools) {
+            import_extra_zfs_pools();
+        }
     }
+
+    return 0;
 }
 
 extern "C" void unmount_rootfs(void)
diff --git a/loader.cc b/loader.cc
--- a/loader.cc
+++ b/loader.cc
@@ -87,7 +87,7 @@ extern "C" {
     void premain();
     void vfs_init(void);
     void unmount_devfs();
-    void mount_zfs_rootfs(bool,bool);
+    int mount_zfs_rootfs(bool, bool);
     int mount_rofs_rootfs(bool);
     void rofs_disable_cache();
 }
@@ -396,19 +396,20 @@ void* do_main_thread(void *_main_args)
 
     if (opt_mount) {
         unmount_devfs();
-        //
+
         // Try to mount rofs
-        if(mount_rofs_rootfs(opt_pivot) != 0) {
-            //
+        if (mount_rofs_rootfs(opt_pivot) != 0) {
             // Failed -> try to mount zfs
             zfsdev::zfsdev_init();
-            mount_zfs_rootfs(opt_pivot, opt_extra_zfs_pools);
+            auto error = mount_zfs_rootfs(opt_pivot, opt_extra_zfs_pools);
+            if (error) {
+                debug("Could not mount zfs root filesystem.\n");
+            }
             bsd_shrinker_init();
 
             boot_time.event("ZFS mounted");
-        }
-        else {
-            if(opt_disable_rofs_cache) {
+        } else {
+            if (opt_disable_rofs_cache) {
                 debug("Disabling ROFS memory cache.\n");
                 rofs_disable_cache();
             }
@@ -491,8 +492,7 @@ void* do_main_thread(void *_main_args)
 
     if (opt_bootchart) {
         boot_time.print_chart();
-    }
-    else {
+    } else {
         boot_time.print_total_time();
     }
 

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/000000000000ee8ef805adf96e14%40google.com.

Reply via email to