Print this page
PSARC 2008/290 lofi mount
6384817 Need persistent lofi based mounts and direct mount(1m) support for lofi

@@ -22,11 +22,11 @@
 /*
  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident   "@(#)vplat.c    1.60    08/04/08 SMI"
+#pragma ident   "@(#)vplat.c    1.61    08/05/07 SMI"
 
 /*
  * This module contains functions used to bring up and tear down the
  * Virtual Platform: [un]mounting file-systems, [un]plumbing network
  * interfaces, [un]configuring devices, establishing resource controls,

@@ -802,10 +802,21 @@
         }
         return (WEXITSTATUS(child_status));
 }
 
 static int
+isregfile(const char *path)
+{
+        struct stat64 st;
+
+        if (stat64(path, &st) == -1)
+                return (-1);
+
+        return (S_ISREG(st.st_mode));
+}
+
+static int
 dofsck(zlog_t *zlogp, const char *fstype, const char *rawdev)
 {
         char cmdbuf[MAXPATHLEN];
         char *argv[4];
         int status;

@@ -818,10 +829,16 @@
             >= sizeof (cmdbuf)) {
                 zerror(zlogp, B_FALSE, "file-system type %s too long", fstype);
                 return (-1);
         }
 
+        /*
+         * If it doesn't exist, that's OK: we verified this previously.
+         */
+        if (isregfile(cmdbuf) == -1)
+                return (0);
+
         argv[0] = "fsck";
         argv[1] = "-m";
         argv[2] = (char *)rawdev;
         argv[3] = NULL;
 

@@ -1259,12 +1276,16 @@
 
         /*
          * Run 'fsck -m' if there's a device to fsck.
          */
         if (fsptr->zone_fs_raw[0] != '\0' &&
-            dofsck(zlogp, fsptr->zone_fs_type, fsptr->zone_fs_raw) != 0)
+            dofsck(zlogp, fsptr->zone_fs_type, fsptr->zone_fs_raw) != 0) {
                 return (-1);
+        } else if (isregfile(fsptr->zone_fs_special) == 1 &&
+            dofsck(zlogp, fsptr->zone_fs_type, fsptr->zone_fs_special) != 0) {
+                return (-1);
+        }
 
         /*
          * Build up mount option string.
          */
         optstr[0] = '\0';