Change the kernel dev_t, representing a pointer to a specinfo structure,
[dragonfly.git] / sys / kern / vfs_conf.c
index 411d704..d9ee84c 100644 (file)
@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  *     $FreeBSD: src/sys/kern/vfs_conf.c,v 1.49.2.5 2003/01/07 11:56:53 joerg Exp $
- *     $DragonFly: src/sys/kern/vfs_conf.c,v 1.13 2005/04/19 17:54:42 dillon Exp $
+ *     $DragonFly: src/sys/kern/vfs_conf.c,v 1.20 2006/09/10 01:26:39 dillon Exp $
  */
 
 /*
@@ -60,6 +60,7 @@
 #include <sys/device.h>
 #include <sys/namecache.h>
 #include <sys/paths.h>
+#include <sys/thread2.h>
 
 #include "opt_ddb.h"
 #ifdef DDB
@@ -104,7 +105,7 @@ static void
 vfs_mountroot(void *junk)
 {
        int     i;
-       dev_t   save_rootdev = rootdev;
+       cdev_t  save_rootdev = rootdev;
        
        /* 
         * The root filesystem information is compiled in, and we are
@@ -141,13 +142,13 @@ vfs_mountroot(void *junk)
         * supplied via some other means.  This is the preferred 
         * mechanism.
         */
-       if (!vfs_mountroot_try(getenv("vfs.root.mountfrom")))
+       if (!vfs_mountroot_try(kgetenv("vfs.root.mountfrom")))
                return;
 
        /*
         * If a vfs set rootdev, try it (XXX VINUM HACK!)
         */
-       if (save_rootdev != NODEV) {
+       if (save_rootdev != NOCDEV) {
                rootdev = save_rootdev;
                if (!vfs_mountroot_try(""))
                        return;
@@ -187,12 +188,10 @@ vfs_mountroot(void *junk)
 static int
 vfs_mountroot_try(const char *mountfrom)
 {
-       struct thread   *td = curthread;
         struct mount   *mp;
        char            *vfsname, *devname;
        int             error;
        char            patt[32];
-       int             s;
 
        vfsname = NULL;
        devname = NULL;
@@ -202,13 +201,13 @@ vfs_mountroot_try(const char *mountfrom)
        if (mountfrom == NULL)
                return(error);          /* don't complain */
 
-       s = splcam();                   /* Overkill, but annoying without it */
+       crit_enter();
        printf("Mounting root from %s\n", mountfrom);
-       splx(s);
+       crit_exit();
 
        /* parse vfs name and devname */
-       vfsname = malloc(MFSNAMELEN, M_MOUNT, M_WAITOK);
-       devname = malloc(MNAMELEN, M_MOUNT, M_WAITOK);
+       vfsname = kmalloc(MFSNAMELEN, M_MOUNT, M_WAITOK);
+       devname = kmalloc(MNAMELEN, M_MOUNT, M_WAITOK);
        vfsname[0] = devname[0] = 0;
        sprintf(patt, "%%%d[a-z0-9]:%%%ds", MFSNAMELEN, MNAMELEN);
        if (sscanf(mountfrom, patt, vfsname, devname) < 1)
@@ -229,22 +228,22 @@ vfs_mountroot_try(const char *mountfrom)
                printf("setrootbyname failed\n");
 
        /* If the root device is a type "memory disk", mount RW */
-       if (rootdev != NODEV && dev_is_good(rootdev) &&
+       if (rootdev != NOCDEV && dev_is_good(rootdev) &&
            (dev_dflags(rootdev) & D_MEMDISK)) {
                mp->mnt_flag &= ~MNT_RDONLY;
        }
 
-       error = VFS_MOUNT(mp, NULL, NULL, td);
+       error = VFS_MOUNT(mp, NULL, NULL, proc0.p_ucred);
 
 done:
        if (vfsname != NULL)
-               free(vfsname, M_MOUNT);
+               kfree(vfsname, M_MOUNT);
        if (devname != NULL)
-               free(devname, M_MOUNT);
+               kfree(devname, M_MOUNT);
        if (error != 0) {
                if (mp != NULL) {
-                       vfs_unbusy(mp, td);
-                       free(mp, M_MOUNT);
+                       vfs_unbusy(mp);
+                       kfree(mp, M_MOUNT);
                }
                printf("Root mount failed: %d\n", error);
        } else {
@@ -253,7 +252,7 @@ done:
 
                /* sanity check system clock against root fs timestamp */
                inittodr(mp->mnt_time);
-               vfs_unbusy(mp, td);
+               vfs_unbusy(mp);
        }
        return(error);
 }
@@ -266,7 +265,7 @@ vfs_mountroot_ask(void)
 {
        char name[128];
        int i;
-       dev_t dev;
+       cdev_t dev;
 
        for(;;) {
                printf("\nManual root filesystem specification:\n");
@@ -332,17 +331,17 @@ gets(char *cp)
 }
 
 /*
- * Convert a given name to the dev_t of the disk-like device
+ * Convert a given name to the cdev_t of the disk-like device
  * it refers to.
  */
-dev_t
-getdiskbyname(const char *name) 
+cdev_t
+kgetdiskbyname(const char *name) 
 {
        char *cp;
        int nlen;
        int cd, unit, slice, part;
-       dev_t dev;
-       dev_t rdev;
+       cdev_t dev;
+       cdev_t rdev;
 
        /*
         * Get the base name of the device
@@ -356,7 +355,7 @@ getdiskbyname(const char *name)
                ++cp;
        if (cp == name) {
                printf("missing device name\n");
-               return (NODEV);
+               return (NOCDEV);
        }
        nlen = cp - name;
 
@@ -366,7 +365,7 @@ getdiskbyname(const char *name)
        unit = strtol(cp, &cp, 10);
        if (name + nlen == (const char *)cp || unit < 0 || unit > DKMAXUNIT) {
                printf("bad unit: %d\n", unit);
-               return (NODEV);
+               return (NOCDEV);
        }
 
        /*
@@ -379,7 +378,7 @@ getdiskbyname(const char *name)
                slice = cp[1] - '0';
                if (slice < 1 || slice > 9) {
                        printf("bad slice number\n");
-                       return(NODEV);
+                       return(NOCDEV);
                }
                ++slice;        /* slice #1 starts at 2 */
                cp += 2;
@@ -399,7 +398,7 @@ getdiskbyname(const char *name)
 
        if (*cp != '\0') {
                printf("junk after name\n");
-               return (NODEV);
+               return (NOCDEV);
        }
 
        /*
@@ -418,7 +417,7 @@ getdiskbyname(const char *name)
        }
        if (cd == NUMCDEVSW) {
                printf("no such device '%*.*s'\n", nlen, nlen, name);
-               return (NODEV);
+               return (NOCDEV);
        }
 
        /*
@@ -435,10 +434,10 @@ getdiskbyname(const char *name)
 static int
 setrootbyname(char *name)
 {
-       dev_t diskdev;
+       cdev_t diskdev;
 
-       diskdev = getdiskbyname(name);
-       if (diskdev != NODEV) {
+       diskdev = kgetdiskbyname(name);
+       if (diskdev != NOCDEV) {
                rootdev = diskdev;
                return (0);
        }
@@ -449,15 +448,15 @@ setrootbyname(char *name)
 #ifdef DDB
 DB_SHOW_COMMAND(disk, db_getdiskbyname)
 {
-       dev_t dev;
+       cdev_t dev;
 
        if (modif[0] == '\0') {
                db_error("usage: show disk/devicename");
                return;
        }
-       dev = getdiskbyname(modif);
-       if (dev != NODEV)
-               db_printf("dev_t = %p\n", dev);
+       dev = kgetdiskbyname(modif);
+       if (dev != NOCDEV)
+               db_printf("cdev_t = %p\n", dev);
        else
                db_printf("No disk device matched.\n");
 }