Module Name: src
Committed By: pooka
Date: Tue Mar 2 17:20:03 UTC 2010
Modified Files:
src/sys/ufs/mfs: mfs_extern.h mfs_vfsops.c
Added Files:
src/sys/ufs/mfs: mfs_miniroot.c
Log Message:
Make mfs_initminiroot() mandatory. Allows to remove #ifdef MFS.
To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 src/sys/ufs/mfs/mfs_extern.h
cvs rdiff -u -r0 -r1.1 src/sys/ufs/mfs/mfs_miniroot.c
cvs rdiff -u -r1.101 -r1.102 src/sys/ufs/mfs/mfs_vfsops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/ufs/mfs/mfs_extern.h
diff -u src/sys/ufs/mfs/mfs_extern.h:1.30 src/sys/ufs/mfs/mfs_extern.h:1.31
--- src/sys/ufs/mfs/mfs_extern.h:1.30 Sat Jun 28 01:34:05 2008
+++ src/sys/ufs/mfs/mfs_extern.h Tue Mar 2 17:20:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mfs_extern.h,v 1.30 2008/06/28 01:34:05 rumble Exp $ */
+/* $NetBSD: mfs_extern.h,v 1.31 2010/03/02 17:20:02 pooka Exp $ */
/*-
* Copyright (c) 1991, 1993
@@ -69,6 +69,8 @@
#include <sys/mutex.h>
extern kmutex_t mfs_lock;
+extern void *mfs_rootbase;
+extern u_long mfs_rootsize;
#endif
Index: src/sys/ufs/mfs/mfs_vfsops.c
diff -u src/sys/ufs/mfs/mfs_vfsops.c:1.101 src/sys/ufs/mfs/mfs_vfsops.c:1.102
--- src/sys/ufs/mfs/mfs_vfsops.c:1.101 Tue Jan 13 13:35:54 2009
+++ src/sys/ufs/mfs/mfs_vfsops.c Tue Mar 2 17:20:02 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: mfs_vfsops.c,v 1.101 2009/01/13 13:35:54 yamt Exp $ */
+/* $NetBSD: mfs_vfsops.c,v 1.102 2010/03/02 17:20:02 pooka Exp $ */
/*
* Copyright (c) 1989, 1990, 1993, 1994
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mfs_vfsops.c,v 1.101 2009/01/13 13:35:54 yamt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mfs_vfsops.c,v 1.102 2010/03/02 17:20:02 pooka Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -68,11 +68,10 @@
MODULE(MODULE_CLASS_VFS, mfs, "ffs");
-void * mfs_rootbase; /* address of mini-root in kernel virtual memory */
-u_long mfs_rootsize; /* size of mini-root in bytes */
kmutex_t mfs_lock; /* global lock */
-static int mfs_minor; /* used for building internal dev_t */
+/* used for building internal dev_t, minor == 0 reserved for miniroot */
+static int mfs_minor = 1;
static int mfs_initcnt;
extern int (**mfs_vnodeop_p)(void *);
@@ -241,27 +240,6 @@
}
/*
- * This is called early in boot to set the base address and size
- * of the mini-root.
- */
-int
-mfs_initminiroot(void *base)
-{
- struct fs *fs = (struct fs *)((char *)base + SBLOCK_UFS1);
-
- /* check for valid super block */
- if (fs->fs_magic != FS_UFS1_MAGIC || fs->fs_bsize > MAXBSIZE ||
- fs->fs_bsize < sizeof(struct fs))
- return (0);
- rootfstype = MOUNT_MFS;
- mfs_rootbase = base;
- mfs_rootsize = fs->fs_fsize * fs->fs_size;
- rootdev = makedev(255, mfs_minor);
- mfs_minor++;
- return (mfs_rootsize);
-}
-
-/*
* VFS Operations.
*
* mount system call
Added files:
Index: src/sys/ufs/mfs/mfs_miniroot.c
diff -u /dev/null src/sys/ufs/mfs/mfs_miniroot.c:1.1
--- /dev/null Tue Mar 2 17:20:03 2010
+++ src/sys/ufs/mfs/mfs_miniroot.c Tue Mar 2 17:20:02 2010
@@ -0,0 +1,68 @@
+/* $NetBSD: mfs_miniroot.c,v 1.1 2010/03/02 17:20:02 pooka Exp $ */
+
+/*
+ * Copyright (c) 1989, 1990, 1993, 1994
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)mfs_vfsops.c 8.11 (Berkeley) 6/19/95
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: mfs_miniroot.c,v 1.1 2010/03/02 17:20:02 pooka Exp $");
+
+#include <sys/param.h>
+
+#include <ufs/mfs/mfs_extern.h>
+#include <ufs/ffs/fs.h>
+
+void * mfs_rootbase; /* address of mini-root in kernel virtual memory */
+u_long mfs_rootsize; /* size of mini-root in bytes */
+
+/*
+ * This is called early in boot to set the base address and size
+ * of the mini-root.
+ */
+int
+mfs_initminiroot(void *base)
+{
+ struct fs *fs = (struct fs *)((char *)base + SBLOCK_UFS1);
+ static bool inited = false;
+
+ if (inited)
+ panic("mfs_initminiroot() called more than once");
+ inited = true;
+
+ /* check for valid super block */
+ if (fs->fs_magic != FS_UFS1_MAGIC || fs->fs_bsize > MAXBSIZE ||
+ fs->fs_bsize < sizeof(struct fs))
+ return (0);
+ rootfstype = MOUNT_MFS;
+ mfs_rootbase = base;
+ mfs_rootsize = fs->fs_fsize * fs->fs_size;
+ rootdev = makedev(255, 0);
+ return (mfs_rootsize);
+}