Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/lkm/vfs/ufs lfs is now loadable as LKM
details: https://anonhg.NetBSD.org/src/rev/dd1aa1a23339
branches: trunk
changeset: 499833:dd1aa1a23339
user: jdolecek <jdolecek%NetBSD.org@localhost>
date: Thu Nov 30 16:00:55 2000 +0000
description:
lfs is now loadable as LKM
diffstat:
sys/lkm/vfs/ufs/Makefile | 5 +-
sys/lkm/vfs/ufs/lfs/Makefile | 4 +-
sys/lkm/vfs/ufs/lfs/lkminit_lfs.c | 72 ---------------
sys/lkm/vfs/ufs/lfs/lkminit_vfs.c | 180 ++++++++++++++++++++++++++++++++++++++
4 files changed, 184 insertions(+), 77 deletions(-)
diffs (291 lines):
diff -r 8f9598ac1a83 -r dd1aa1a23339 sys/lkm/vfs/ufs/Makefile
--- a/sys/lkm/vfs/ufs/Makefile Thu Nov 30 15:59:47 2000 +0000
+++ b/sys/lkm/vfs/ufs/Makefile Thu Nov 30 16:00:55 2000 +0000
@@ -1,7 +1,6 @@
-# $NetBSD: Makefile,v 1.2 1998/10/04 11:45:44 bouyer Exp $
+# $NetBSD: Makefile,v 1.3 2000/11/30 16:00:55 jdolecek Exp $
# MISSING: lfs (loads, but needs syscalls installed)
-# ffs (untested, needs syscalls installed)
-SUBDIR= ext2fs mfs
+SUBDIR= ext2fs lfs mfs
.include <bsd.subdir.mk>
diff -r 8f9598ac1a83 -r dd1aa1a23339 sys/lkm/vfs/ufs/lfs/Makefile
--- a/sys/lkm/vfs/ufs/lfs/Makefile Thu Nov 30 15:59:47 2000 +0000
+++ b/sys/lkm/vfs/ufs/lfs/Makefile Thu Nov 30 16:00:55 2000 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.5 1999/02/13 02:54:54 lukem Exp $
+# $NetBSD: Makefile,v 1.6 2000/11/30 16:00:56 jdolecek Exp $
.include "../Makefile.inc"
@@ -8,7 +8,7 @@
KMOD= lfs
-SRCS= lkminit_${KMOD}.c
+SRCS= lkminit_vfs.c
SRCS+= lfs_vfsops.c lfs_vnops.c lfs_subr.c
SRCS+= lfs_alloc.c lfs_balloc.c lfs_bio.c lfs_cksum.c lfs_debug.c
SRCS+= lfs_inode.c lfs_segment.c lfs_syscalls.c
diff -r 8f9598ac1a83 -r dd1aa1a23339 sys/lkm/vfs/ufs/lfs/lkminit_lfs.c
--- a/sys/lkm/vfs/ufs/lfs/lkminit_lfs.c Thu Nov 30 15:59:47 2000 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/* $NetBSD: lkminit_lfs.c,v 1.4 2000/03/21 11:46:01 simonb Exp $ */
-
-/*-
- * Copyright (c) 1996 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Michael Graff <explorer%flame.org@localhost>.
- *
- * 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
- */
-
-#include <sys/param.h>
-#include <sys/ioctl.h>
-#include <sys/systm.h>
-#include <sys/conf.h>
-#include <sys/mount.h>
-#include <sys/exec.h>
-#include <sys/lkm.h>
-#include <sys/file.h>
-#include <sys/errno.h>
-
-int lfs_lkmentry __P((struct lkm_table *, int, int));
-
-/*
- * This is the vfsops table for the file system in question
- */
-extern struct vfsops lfs_vfsops;
-
-/*
- * declare the filesystem
- */
-MOD_VFS("lfs", -1, &lfs_vfsops);
-
-/*
- * entry point
- */
-int
-lfs_lkmentry(lkmtp, cmd, ver)
- struct lkm_table *lkmtp;
- int cmd;
- int ver;
-{
-
- DISPATCH(lkmtp, cmd, ver, lkm_nofunc, lkm_nofunc, lkm_nofunc)
-}
diff -r 8f9598ac1a83 -r dd1aa1a23339 sys/lkm/vfs/ufs/lfs/lkminit_vfs.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/lkm/vfs/ufs/lfs/lkminit_vfs.c Thu Nov 30 16:00:55 2000 +0000
@@ -0,0 +1,180 @@
+/* $NetBSD: lkminit_vfs.c,v 1.1 2000/11/30 16:00:56 jdolecek Exp $ */
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+ */
+
+#include <sys/param.h>
+#include <sys/ioctl.h>
+#include <sys/systm.h>
+#include <sys/conf.h>
+#include <sys/mount.h>
+#include <sys/exec.h>
+#include <sys/lkm.h>
+#include <sys/file.h>
+#include <sys/errno.h>
+
+#define LFS
+#include <sys/syscall.h>
+#include <sys/syscallargs.h>
+
+/* used for lfs syscal entry table */
+struct lfs_sysent {
+ int sysno;
+ struct sysent sysent;
+};
+
+int lfs_lkmentry __P((struct lkm_table *, int, int));
+static int lfs_load __P((struct lkm_table *, int));
+static int lfs_unload __P((struct lkm_table *, int));
+
+#define LFS_SYSENT_CNT 4
+const struct lfs_sysent lfs_sysents[LFS_SYSENT_CNT] = {
+ { SYS_lfs_bmapv,
+ { 3, sizeof(struct sys_lfs_bmapv_args), sys_lfs_bmapv } },
+ { SYS_lfs_markv,
+ { 3, sizeof(struct sys_lfs_markv_args), sys_lfs_markv } },
+ { SYS_lfs_segclean,
+ { 2, sizeof(struct sys_lfs_segclean_args), sys_lfs_segclean } },
+ { SYS_lfs_segwait,
+ { 2, sizeof(struct sys_lfs_segwait_args), sys_lfs_segwait } },
+};
+
+/*
+ * This is the vfsops table for the file system in question
+ */
+extern struct vfsops lfs_vfsops;
+
+/*
+ * declare the filesystem
+ */
+MOD_VFS("lfs", -1, &lfs_vfsops);
+
+/*
+ * entry point
+ */
+int
+lfs_lkmentry(lkmtp, cmd, ver)
+ struct lkm_table *lkmtp;
+ int cmd;
+ int ver;
+{
+ int error;
+
+ /*
+ * Since we need to call lkmdispatch() first, we can't use
+ * DISPATCH().
+ */
+
+ if (ver != LKM_VERSION)
+ return EINVAL; /* version mismatch */
+
+ /* do this first, lkmdispatch() expects this to be already filled in */
+ if (cmd == LKM_E_LOAD)
+ lkmtp->private.lkm_any = (struct lkm_any *)&_module;
+
+ if ((error = lkmdispatch(lkmtp, cmd)))
+ return error;
+
+ switch (cmd) {
+ case LKM_E_LOAD:
+ if ((error = lfs_load(lkmtp, cmd)) != 0)
+ return error;
+ break;
+ case LKM_E_UNLOAD:
+ if ((error = lfs_unload(lkmtp, cmd)) != 0)
+ return error;
+ break;
+ case LKM_E_STAT:
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+/*
+ * Insert lfs sycalls entries into sysent[].
+ */
+static int
+lfs_load(lkmtp, cmd)
+ struct lkm_table *lkmtp;
+ int cmd;
+{
+ int i;
+
+ /* first check if the entries are empty */
+ for(i=0; i < LFS_SYSENT_CNT; i++) {
+ if (sysent[lfs_sysents[i].sysno].sy_call != sys_nosys) {
+ printf("LKM lfs_load(): lfs syscall %d already used\n",
+ lfs_sysents[i].sysno);
+ return EEXIST;
+ }
+ }
+
+ /* now, put in the lfs syscalls */
+ for(i=0; i < LFS_SYSENT_CNT; i++) {
+ sysent[lfs_sysents[i].sysno].sy_narg =
+ lfs_sysents[i].sysent.sy_narg;
+ sysent[lfs_sysents[i].sysno].sy_argsize =
+ lfs_sysents[i].sysent.sy_argsize;
+ sysent[lfs_sysents[i].sysno].sy_call =
+ lfs_sysents[i].sysent.sy_call;
+ }
+
+ return 0;
+}
+
+/*
+ * Remove lfs sycalls entries from sysent[].
+ */
+static int
+lfs_unload(lkmtp, cmd)
+ struct lkm_table *lkmtp;
+ int cmd;
+{
+ int i;
+
+ /* reset lfs syscall entries back to nosys */
+ for(i=0; i < LFS_SYSENT_CNT; i++) {
+ if (sysent[lfs_sysents[i].sysno].sy_call !=
+ lfs_sysents[i].sysent.sy_call) {
+ panic("LKM lfs_unload(): syscall %d not lfs syscall",
+ lfs_sysents[i].sysno);
+ }
+ sysent[lfs_sysents[i].sysno].sy_narg = 0;
+ sysent[lfs_sysents[i].sysno].sy_argsize = 0;
+ sysent[lfs_sysents[i].sysno].sy_call = sys_nosys;
+ }
+
+ return 0;
+}
Home |
Main Index |
Thread Index |
Old Index