VFS messaging/interfacing work stage 1/99. This stage replaces the old
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 13 Aug 2004 17:51:14 +0000 (17:51 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 13 Aug 2004 17:51:14 +0000 (17:51 +0000)
dynamic VFS descriptor and inlined wrapper mess with a fixed structure
and fixed procedural wrappers.  Most of the work is straightforward except
for vfs_init, which was basically rewritten (and greatly simplified).

It is my intention to make the vop_*() call wrappers eventually handle
range locking and cache coherency issues as well as implementing the
direct call -> messaging interface layer.  The call wrappers will also
API translation as we shift the APIs over to new, more powerful mechanisms
in order to allow the work to be incrementally committed.

This is the first stage of what is likely to be a huge number of stages
to modernize the VFS subsystem.

124 files changed:
sys/bus/usb/usb/Makefile
sys/checkpt/Makefile
sys/conf/Makefile.alpha
sys/conf/Makefile.amd64
sys/conf/Makefile.i386
sys/conf/Makefile.pc98
sys/conf/files
sys/dev/disk/ccd/Makefile
sys/dev/disk/vn/Makefile
sys/dev/misc/nmdm/Makefile
sys/dev/misc/snp/Makefile
sys/dev/raid/vinum/Makefile
sys/dev/sound/usb/Makefile
sys/dev/usbmisc/ubsa/Makefile
sys/dev/usbmisc/ucom/Makefile
sys/dev/usbmisc/ufm/Makefile
sys/dev/usbmisc/uftdi/Makefile
sys/dev/usbmisc/ugen/Makefile
sys/dev/usbmisc/uhid/Makefile
sys/dev/usbmisc/ukbd/Makefile
sys/dev/usbmisc/ulpt/Makefile
sys/dev/usbmisc/umodem/Makefile
sys/dev/usbmisc/ums/Makefile
sys/dev/usbmisc/uplcom/Makefile
sys/dev/usbmisc/uscanner/Makefile
sys/dev/usbmisc/uvisor/Makefile
sys/dev/usbmisc/uvscom/Makefile
sys/dev/video/bktr/bktr/Makefile
sys/emulation/ibcs2/Makefile
sys/emulation/ibcs2/coff/Makefile
sys/emulation/linux/Makefile
sys/emulation/linux/i386/linprocfs/Makefile
sys/emulation/linux/i386/linprocfs/linprocfs.h
sys/emulation/linux/i386/linprocfs/linprocfs_subr.c
sys/emulation/linux/i386/linprocfs/linprocfs_vnops.c
sys/emulation/ndis/Makefile
sys/emulation/svr4/Makefile
sys/kern/vfs_default.c
sys/kern/vfs_init.c
sys/kern/vfs_subr.c
sys/kern/vfs_vopops.c [new file with mode: 0644]
sys/kern/vnode_if.src [deleted file]
sys/net/ppp_layer/Makefile
sys/net/tap/Makefile
sys/net/tun/Makefile
sys/sys/vfsops.h [new file with mode: 0644]
sys/sys/vnode.h
sys/sys/vopops.h [new file with mode: 0644]
sys/vfs/coda/Makefile
sys/vfs/coda/coda_vnops.c
sys/vfs/coda/coda_vnops.h
sys/vfs/deadfs/dead_vnops.c
sys/vfs/fdesc/Makefile
sys/vfs/fdesc/fdesc_vnops.c
sys/vfs/fifofs/Makefile
sys/vfs/fifofs/fifo.h
sys/vfs/fifofs/fifo_vnops.c
sys/vfs/gnu/ext2fs/Makefile
sys/vfs/gnu/ext2fs/ext2_extern.h
sys/vfs/gnu/ext2fs/ext2_vfsops.c
sys/vfs/gnu/ext2fs/ext2_vnops.c
sys/vfs/hpfs/Makefile
sys/vfs/hpfs/hpfs.h
sys/vfs/hpfs/hpfs_vfsops.c
sys/vfs/hpfs/hpfs_vnops.c
sys/vfs/isofs/cd9660/Makefile
sys/vfs/isofs/cd9660/cd9660_vfsops.c
sys/vfs/isofs/cd9660/cd9660_vnops.c
sys/vfs/isofs/cd9660/iso.h
sys/vfs/mfs/Makefile
sys/vfs/mfs/mfs_vfsops.c
sys/vfs/mfs/mfs_vnops.c
sys/vfs/msdosfs/Makefile
sys/vfs/msdosfs/denode.h
sys/vfs/msdosfs/msdosfs_denode.c
sys/vfs/msdosfs/msdosfs_vnops.c
sys/vfs/nfs/Makefile
sys/vfs/nfs/nfs_node.c
sys/vfs/nfs/nfs_nqlease.c
sys/vfs/nfs/nfs_subs.c
sys/vfs/nfs/nfs_vnops.c
sys/vfs/nfs/nfsnode.h
sys/vfs/nfs/nqnfs.h
sys/vfs/ntfs/Makefile
sys/vfs/ntfs/ntfs.h
sys/vfs/ntfs/ntfs_vfsops.c
sys/vfs/ntfs/ntfs_vnops.c
sys/vfs/nullfs/Makefile
sys/vfs/nullfs/null.h
sys/vfs/nullfs/null_subr.c
sys/vfs/nullfs/null_vfsops.c
sys/vfs/nullfs/null_vnops.c
sys/vfs/nwfs/Makefile
sys/vfs/nwfs/nwfs_node.c
sys/vfs/nwfs/nwfs_vnops.c
sys/vfs/portal/Makefile
sys/vfs/portal/portal.h
sys/vfs/portal/portal_vfsops.c
sys/vfs/portal/portal_vnops.c
sys/vfs/procfs/Makefile
sys/vfs/procfs/procfs.h
sys/vfs/procfs/procfs_subr.c
sys/vfs/procfs/procfs_vnops.c
sys/vfs/smbfs/Makefile
sys/vfs/smbfs/smbfs_node.c
sys/vfs/smbfs/smbfs_vnops.c
sys/vfs/specfs/spec_vnops.c
sys/vfs/udf/Makefile
sys/vfs/udf/udf_vnops.c
sys/vfs/ufs/ffs_extern.h
sys/vfs/ufs/ffs_vfsops.c
sys/vfs/ufs/ffs_vnops.c
sys/vfs/ufs/ufs_extern.h
sys/vfs/ufs/ufs_vnops.c
sys/vfs/umapfs/Makefile
sys/vfs/umapfs/umap.h
sys/vfs/umapfs/umap_subr.c
sys/vfs/umapfs/umap_vnops.c
sys/vfs/union/Makefile
sys/vfs/union/union.h
sys/vfs/union/union_subr.c
sys/vfs/union/union_vfsops.c
sys/vfs/union/union_vnops.c
sys/vm/vm_swap.c

index 3bc8b04..26826c0 100644 (file)
@@ -1,13 +1,12 @@
 # Makefile - module build for usb.ko
 #
-# $DragonFly: src/sys/bus/usb/usb/Makefile,v 1.1 2004/03/17 18:12:57 dillon Exp $
+# $DragonFly: src/sys/bus/usb/usb/Makefile,v 1.2 2004/08/13 17:51:01 dillon Exp $
 
 S               = ${.CURDIR}/../../..
 .PATH:          $S/bus/pci $S/bus/usb
 
 KMOD            = usb
 SRCS            = bus_if.h device_if.h usb_if.h usb_if.c \
-                  vnode_if.h \
                   opt_usb.h \
                   hid.c hid.h usbhid.h \
                   uhub.c \
index aed4697..7ffac7b 100644 (file)
@@ -1,7 +1,7 @@
-# $DragonFly: src/sys/checkpt/Attic/Makefile,v 1.1 2003/10/20 04:48:42 dillon Exp $
+# $DragonFly: src/sys/checkpt/Attic/Makefile,v 1.2 2004/08/13 17:51:05 dillon Exp $
 #
 
 KMOD=  checkpt
-SRCS=  checkpt.c vnode_if.h support.c
+SRCS=  checkpt.c support.c
 
 .include <bsd.kmod.mk>
index a68fd3e..8603cf8 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright 1990 W. Jolitz
 #      from: @(#)Makefile.alpha        7.1 5/10/91
 # $FreeBSD: src/sys/conf/Makefile.alpha,v 1.47.2.15 2002/11/18 11:26:49 ru Exp $
-# $DragonFly: src/sys/conf/Attic/Makefile.alpha,v 1.5 2004/05/21 10:47:45 hmp Exp $
+# $DragonFly: src/sys/conf/Attic/Makefile.alpha,v 1.6 2004/08/13 17:51:05 dillon Exp $
 #
 # Makefile for DragonFly BSD
 #
@@ -77,10 +77,10 @@ NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC}
 PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC}
 
 GEN_CFILES= $S/$M/$M/genassym.c
-SYSTEM_CFILES= ioconf.c vnode_if.c config.c
+SYSTEM_CFILES= ioconf.c config.c
 SYSTEM_SFILES= $S/$M/$M/locore.s
 SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
-SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o config.o hack.So
+SYSTEM_OBJS= locore.o ${OBJS} ioconf.o config.o hack.So
 SYSTEM_LD= @${LD} -Bdynamic -T $S/conf/ldscript.$M \
        -e locorestart \
        -export-dynamic -dynamic-linker /red/herring \
@@ -126,7 +126,7 @@ ${FULLKERNEL}: ${SYSTEM_DEP} vers.o
        ${SYSTEM_LD_TAIL}
 
 .if !exists(.depend)
-${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h}
+${SYSTEM_OBJS}: ${BEFORE_DEPEND:M*.h}
 .endif
 
 kernel-clean:
@@ -208,7 +208,7 @@ __reml.S: $S/$M/$M/divrem.m4
 
 ${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
 
-kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \
+kernel-depend: assym.s ${BEFORE_DEPEND} \
            ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} ${SYSTEM_SFILES}
        rm -f .newdep
        mkdep -a -f .newdep ${CFLAGS} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES}
@@ -320,14 +320,14 @@ vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
 vers.o:
        ${NORMAL_C}
 
-vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
-       perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
-
-vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
-       perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
-
-vnode_if.o:
-       ${NORMAL_C}
+#vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
+#      perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
+#
+#vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
+#      perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
+#
+#vnode_if.o:
+#      ${NORMAL_C}
 
 .include "$S/conf/bsd.kern.mk"
 
index 560d49f..0b8a333 100644 (file)
@@ -1,7 +1,7 @@
 # Makefile.amd64 -- with config changes.
 # Copyright 1990 W. Jolitz
 #      from: @(#)Makefile.i386 7.1 5/10/91
-# $DragonFly: src/sys/conf/Attic/Makefile.amd64,v 1.3 2004/05/21 10:47:45 hmp Exp $
+# $DragonFly: src/sys/conf/Attic/Makefile.amd64,v 1.4 2004/08/13 17:51:05 dillon Exp $
 #
 # Makefile for DragonFly BSD
 #
@@ -87,10 +87,10 @@ NORMAL_M= perl5 $S/kern/makeobjops.pl -c $<; \
        ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
 
 GEN_CFILES= $S/$M/$M/genassym.c
-SYSTEM_CFILES= ioconf.c vnode_if.c config.c
+SYSTEM_CFILES= ioconf.c config.c
 SYSTEM_SFILES= $S/$M/$M/locore.s
 SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
-SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o config.o hack.So
+SYSTEM_OBJS= locore.o ${OBJS} ioconf.o config.o hack.So
 SYSTEM_LD= @${LD} -Bdynamic -T $S/conf/ldscript.$M \
        -export-dynamic -dynamic-linker /red/herring \
        -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
@@ -136,7 +136,7 @@ ${FULLKERNEL}: ${SYSTEM_DEP} vers.o
        ${SYSTEM_LD_TAIL}
 
 .if !exists(.depend)
-${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/}
+${SYSTEM_OBJS}: ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/}
 .endif
 
 .for mfile in ${MFILES}
@@ -182,7 +182,7 @@ ${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
 
 # The argument list can be very long, use make -V and xargs to
 # pass it to mkdep.
-kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \
+kernel-depend: assym.s ${BEFORE_DEPEND} \
            ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
            ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/}
        rm -f .newdep
@@ -298,14 +298,14 @@ vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
 vers.o:
        ${NORMAL_C}
 
-vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
-       perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
-
-vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
-       perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
-
-vnode_if.o:
-       ${NORMAL_C}
+#vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
+#      perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
+#
+#vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
+#      perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
+#
+#vnode_if.o:
+#      ${NORMAL_C}
 
 .include "$S/conf/bsd.kern.mk"
 
index a42b9ed..2567bbe 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright 1990 W. Jolitz
 #      from: @(#)Makefile.i386 7.1 5/10/91
 # $FreeBSD: src/sys/conf/Makefile.i386,v 1.179.2.16 2002/11/18 11:26:49 ru Exp $
-# $DragonFly: src/sys/conf/Attic/Makefile.i386,v 1.15 2004/05/21 10:47:45 hmp Exp $
+# $DragonFly: src/sys/conf/Attic/Makefile.i386,v 1.16 2004/08/13 17:51:05 dillon Exp $
 #
 # Makefile for DragonFly BSD
 #
@@ -88,10 +88,10 @@ NORMAL_M= awk -f $S/tools/makeobjops.awk -- -c $<; \
        ${CC} -c ${CFLAGS} ${PROF} ${.PREFIX}.c
 
 GEN_CFILES= $S/$M/$M/genassym.c
-SYSTEM_CFILES= ioconf.c vnode_if.c config.c
+SYSTEM_CFILES= ioconf.c config.c
 SYSTEM_SFILES= $S/$M/$M/locore.s
 SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
-SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o config.o hack.So
+SYSTEM_OBJS= locore.o ${OBJS} ioconf.o config.o hack.So
 SYSTEM_LD= @${LD} -Bdynamic -T $S/conf/ldscript.$M \
        -export-dynamic -dynamic-linker /red/herring \
        -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
@@ -137,7 +137,7 @@ ${FULLKERNEL}: ${SYSTEM_DEP} vers.o
        ${SYSTEM_LD_TAIL}
 
 .if !exists(.depend)
-${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/}
+${SYSTEM_OBJS}: ${BEFORE_DEPEND:M*.h} ${MFILES:T:S/.m$/.h/}
 .endif
 
 .for mfile in ${MFILES}
@@ -183,7 +183,7 @@ ${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
 
 # The argument list can be very long, use make -V and xargs to
 # pass it to mkdep.
-kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \
+kernel-depend: assym.s ${BEFORE_DEPEND} \
            ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
            ${SYSTEM_SFILES} ${MFILES:T:S/.m$/.h/}
        rm -f .newdep
@@ -299,14 +299,14 @@ vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
 vers.o:
        ${NORMAL_C}
 
-vnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src
-       awk -f $S/tools/vnode_if.awk -- -c $S/kern/vnode_if.src
-
-vnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src
-       awk -f $S/tools/vnode_if.awk -- -h $S/kern/vnode_if.src
-
-vnode_if.o:
-       ${NORMAL_C}
+#vnode_if.c: $S/tools/vnode_if.awk $S/kern/vnode_if.src
+#      awk -f $S/tools/vnode_if.awk -- -c $S/kern/vnode_if.src
+#
+#vnode_if.h: $S/tools/vnode_if.awk $S/kern/vnode_if.src
+#      awk -f $S/tools/vnode_if.awk -- -h $S/kern/vnode_if.src
+#
+#vnode_if.o:
+#      ${NORMAL_C}
 
 .include "$S/conf/bsd.kern.mk"
 
index 5255320..0a0f9ce 100644 (file)
@@ -4,7 +4,7 @@
 # Copyright 1990 W. Jolitz
 #      from: @(#)Makefile.i386 7.1 5/10/91
 # $FreeBSD: src/sys/conf/Makefile.pc98,v 1.82.2.17 2002/11/18 11:26:49 ru Exp $
-# $DragonFly: src/sys/conf/Attic/Makefile.pc98,v 1.5 2004/05/21 10:47:45 hmp Exp $
+# $DragonFly: src/sys/conf/Attic/Makefile.pc98,v 1.6 2004/08/13 17:51:05 dillon Exp $
 #
 # Makefile for DragonFly BSD
 #
@@ -79,10 +79,10 @@ NORMAL_S= ${CC} -c ${ASM_CFLAGS} ${.IMPSRC}
 PROFILE_C= ${CC} -c ${CFLAGS} ${.IMPSRC}
 
 GEN_CFILES= $S/$M/$M/genassym.c
-SYSTEM_CFILES= ioconf.c vnode_if.c config.c
+SYSTEM_CFILES= ioconf.c config.c
 SYSTEM_SFILES= $S/$M/$M/locore.s
 SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
-SYSTEM_OBJS= locore.o vnode_if.o ${OBJS} ioconf.o config.o hack.So
+SYSTEM_OBJS= locore.o ${OBJS} ioconf.o config.o hack.So
 SYSTEM_LD= @${LD} -Bdynamic -T $S/conf/ldscript.$M \
        -export-dynamic -dynamic-linker /red/herring \
        -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o
@@ -128,7 +128,7 @@ ${FULLKERNEL}: ${SYSTEM_DEP} vers.o
        ${SYSTEM_LD_TAIL}
 
 .if !exists(.depend)
-${SYSTEM_OBJS}: vnode_if.h ${BEFORE_DEPEND:M*.h}
+${SYSTEM_OBJS}: ${BEFORE_DEPEND:M*.h}
 .endif
 
 kernel-clean:
@@ -168,7 +168,7 @@ ${SYSTEM_OBJS} genassym.o vers.o: opt_global.h
 
 # The argument list can be very long, use make -V and xargs to
 # pass it to mkdep.
-kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} \
+kernel-depend: assym.s ${BEFORE_DEPEND} \
            ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} ${SYSTEM_SFILES}
        rm -f .newdep
        ${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | xargs \
@@ -282,14 +282,14 @@ vers.c: $S/conf/newvers.sh $S/sys/param.h ${SYSTEM_DEP}
 vers.o:
        ${NORMAL_C}
 
-vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
-       perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
-
-vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
-       perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
-
-vnode_if.o:
-       ${NORMAL_C}
+#vnode_if.c: $S/kern/vnode_if.pl $S/kern/vnode_if.src
+#      perl5 $S/kern/vnode_if.pl -c $S/kern/vnode_if.src
+#
+#vnode_if.h: $S/kern/vnode_if.pl $S/kern/vnode_if.src
+#      perl5 $S/kern/vnode_if.pl -h $S/kern/vnode_if.src
+#
+#vnode_if.o:
+#      ${NORMAL_C}
 
 .include "$S/conf/bsd.kern.mk"
 
index 7a840d2..d8a5fd4 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/conf/files,v 1.340.2.137 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/sys/conf/files,v 1.69 2004/08/03 07:16:14 joerg Exp $
+# $DragonFly: src/sys/conf/files,v 1.70 2004/08/13 17:51:05 dillon Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -720,6 +720,7 @@ kern/vfs_lookup.c   standard
 kern/vfs_subr.c                standard
 kern/vfs_syscalls.c    standard
 kern/vfs_vnops.c       standard
+kern/vfs_vopops.c      standard
 kern/kern_threads.c    standard
 kern/vfs_aio.c         standard
 vfs/deadfs/dead_vnops.c        standard
index 17d9bd1..65b7959 100644 (file)
@@ -1,9 +1,9 @@
 # $FreeBSD: src/sys/modules/ccd/Makefile,v 1.9 1999/11/28 18:52:42 bde Exp $ 
-# $DragonFly: src/sys/dev/disk/ccd/Makefile,v 1.3 2003/08/15 08:32:29 dillon Exp $ 
+# $DragonFly: src/sys/dev/disk/ccd/Makefile,v 1.4 2004/08/13 17:51:05 dillon Exp $ 
 
 .PATH:  ${.CURDIR}/../../dev/ccd
 KMOD=   ccd
-SRCS=   ccd.c use_ccd.h vnode_if.h
+SRCS=   ccd.c use_ccd.h
 NOMAN=
 
 NCCD?=          4
index 1c925c4..021be33 100644 (file)
@@ -1,9 +1,9 @@
 # $FreeBSD: src/sys/modules/vn/Makefile,v 1.5.2.1 2001/07/24 09:49:43 dd Exp $ 
-# $DragonFly: src/sys/dev/disk/vn/Makefile,v 1.2 2003/06/17 04:28:47 dillon Exp $ 
+# $DragonFly: src/sys/dev/disk/vn/Makefile,v 1.3 2004/08/13 17:51:05 dillon Exp $ 
 
 .PATH:  ${.CURDIR}/../../dev/vn
 KMOD=   vn
-SRCS=   vn.c vnode_if.h
+SRCS=   vn.c
 NOMAN=
 
 .include <bsd.kmod.mk>
index 42adeda..1f51e5b 100644 (file)
@@ -1,11 +1,11 @@
 # $FreeBSD: src/sys/modules/nmdm/Makefile,v 1.1.2.1 2001/08/11 00:54:15 mp Exp $
-# $DragonFly: src/sys/dev/misc/nmdm/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
+# $DragonFly: src/sys/dev/misc/nmdm/Makefile,v 1.3 2004/08/13 17:51:05 dillon Exp $
 
 .PATH: ${.CURDIR}/../../dev/nmdm
 
 KMOD=  nmdm
 SRCS=  nmdm.c
-SRCS+= opt_compat.h vnode_if.h
+SRCS+= opt_compat.h
 
 opt_compat.h:
        echo "#define COMPAT_43 1" >opt_compat.h
index 029a794..ef879f1 100644 (file)
@@ -1,9 +1,9 @@
 # $FreeBSD: src/sys/modules/snp/Makefile,v 1.3.2.1 2002/03/11 01:24:44 dd Exp $
-# $DragonFly: src/sys/dev/misc/snp/Makefile,v 1.2 2003/06/17 04:28:46 dillon Exp $
+# $DragonFly: src/sys/dev/misc/snp/Makefile,v 1.3 2004/08/13 17:51:06 dillon Exp $
 
 .PATH: ${.CURDIR}/../../dev/snp
 
 KMOD=  snp
-SRCS=  snp.c vnode_if.h
+SRCS=  snp.c
 
 .include <bsd.kmod.mk>
index 9236853..03be615 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/modules/vinum/Makefile,v 1.17 2000/01/04 23:46:41 grog Exp $ 
-# $DragonFly: src/sys/dev/raid/vinum/Makefile,v 1.3 2004/01/31 06:56:42 dillon Exp $ 
+# $DragonFly: src/sys/dev/raid/vinum/Makefile,v 1.4 2004/08/13 17:51:06 dillon Exp $ 
 
 .PATH: ${.CURDIR}/../../dev/vinum
 KMOD= vinum
@@ -8,7 +8,7 @@ SRCS= opt_vinum.h request.h vinum.c vinumconfig.c vinumdaemon.c \
        vinumext.h vinumhdr.h vinuminterrupt.c vinumio.c vinumio.h \
        vinumioctl.c vinumkw.h vinumlock.c vinummemory.c vinumparser.c \
        vinumraid5.c vinumrequest.c vinumrevive.c vinumstate.c \
-       vinumstate.h vinumutil.c vinumvar.h vnode_if.h
+       vinumstate.h vinumutil.c vinumvar.h
 
 NOMAN=
 
index 0e0d4e6..6dcb805 100644 (file)
@@ -1,12 +1,11 @@
 #       $FreeBSD: src/sys/modules/usb/Makefile,v 1.7 2000/01/28 11:26:40 bde Exp $ 
-#       $DragonFly: src/sys/dev/sound/usb/Attic/Makefile,v 1.3 2004/01/31 06:56:42 dillon Exp $ 
+#       $DragonFly: src/sys/dev/sound/usb/Attic/Makefile,v 1.4 2004/08/13 17:51:06 dillon Exp $ 
 
 S               = ${.CURDIR}/../..
 
 .PATH:          $S/dev/usb $S/pci
 KMOD            = usb
 SRCS            = bus_if.h device_if.h usb_if.h usb_if.c \
-                  vnode_if.h \
                   opt_usb.h \
                   hid.c hid.h usbhid.h \
                   uhub.c \
index bde3a46..6a8d4b8 100644 (file)
@@ -1,10 +1,10 @@
 # $FreeBSD: src/sys/modules/ubsa/Makefile,v 1.1.2.2 2003/01/14 20:04:22 kan Exp $
-# $DragonFly: src/sys/dev/usbmisc/ubsa/Makefile,v 1.3 2003/08/15 08:32:31 dillon Exp $
+# $DragonFly: src/sys/dev/usbmisc/ubsa/Makefile,v 1.4 2004/08/13 17:51:06 dillon Exp $
 
 .PATH: ${.CURDIR}/../ucom
 
 KMOD=  ubsa
-SRCS=  ubsa.c ucomvar.h opt_usb.h device_if.h bus_if.h vnode_if.h
+SRCS=  ubsa.c ucomvar.h opt_usb.h device_if.h bus_if.h
 NOMAN=
 KMODDEPS= ucom
 
index ce984e9..cc43e9d 100644 (file)
@@ -1,11 +1,11 @@
 # $FreeBSD: src/sys/modules/ucom/Makefile,v 1.1.2.1 2002/08/08 18:45:05 joe Exp $
-# $DragonFly: src/sys/dev/usbmisc/ucom/Makefile,v 1.2 2003/06/17 04:28:47 dillon Exp $
+# $DragonFly: src/sys/dev/usbmisc/ucom/Makefile,v 1.3 2004/08/13 17:51:06 dillon Exp $
 
 S=     ${.CURDIR}/../..
 .PATH: $S/dev/usb
 
 KMOD=  ucom
-SRCS=  ucom.c ucomvar.h opt_usb.h device_if.h bus_if.h vnode_if.h
+SRCS=  ucom.c ucomvar.h opt_usb.h device_if.h bus_if.h
 NOMAN=
 
 .include <bsd.kmod.mk>
index cc37998..673156c 100644 (file)
@@ -1,9 +1,9 @@
 # $FreeBSD: src/sys/modules/ufm/Makefile,v 1.1.2.1 2002/03/04 04:01:36 alfred Exp $
-# $DragonFly: src/sys/dev/usbmisc/ufm/Makefile,v 1.3 2003/08/15 08:32:31 dillon Exp $
+# $DragonFly: src/sys/dev/usbmisc/ufm/Makefile,v 1.4 2004/08/13 17:51:06 dillon Exp $
 
 .PATH: ${.CURDIR}/../../dev/usb ${.CURDIR}/../../../bus/usb
 KMOD=  ufm
-SRCS=  bus_if.h device_if.h vnode_if.h opt_usb.h ufm.c dsbr100io.h
+SRCS=  bus_if.h device_if.h opt_usb.h ufm.c dsbr100io.h
 NOMAN= YES
 
 .include <bsd.kmod.mk>
index 024aec2..7bd4632 100644 (file)
@@ -1,11 +1,11 @@
 # $FreeBSD: src/sys/modules/uftdi/Makefile,v 1.1.2.1 2002/11/21 01:28:18 ticso Exp $
-# $DragonFly: src/sys/dev/usbmisc/uftdi/Makefile,v 1.2 2003/06/17 04:28:47 dillon Exp $
+# $DragonFly: src/sys/dev/usbmisc/uftdi/Makefile,v 1.3 2004/08/13 17:51:06 dillon Exp $
 
 S=     ${.CURDIR}/../..
 .PATH: $S/dev/usb
 
 KMOD=  uftdi
-SRCS=  uftdi.c uftdireg.h opt_usb.h device_if.h bus_if.h vnode_if.h
+SRCS=  uftdi.c uftdireg.h opt_usb.h device_if.h bus_if.h
 NOMAN=
 
 .include <bsd.kmod.mk>
index d5551f1..ae851d1 100644 (file)
@@ -1,9 +1,9 @@
 #       $FreeBSD: src/sys/modules/ugen/Makefile,v 1.7 1999/11/28 18:53:28 bde Exp $ 
-#       $DragonFly: src/sys/dev/usbmisc/ugen/Makefile,v 1.4 2004/07/08 03:53:54 dillon Exp $ 
+#       $DragonFly: src/sys/dev/usbmisc/ugen/Makefile,v 1.5 2004/08/13 17:51:07 dillon Exp $ 
 
 .PATH:          ${.CURDIR}/../../dev/usb
 KMOD            = ugen
-SRCS            = bus_if.h device_if.h vnode_if.h opt_usb.h ugen.c ugenbuf.c
+SRCS            = bus_if.h device_if.h opt_usb.h ugen.c ugenbuf.c
 NOMAN           =
 
 .include <bsd.kmod.mk>
index ac97719..c633177 100644 (file)
@@ -1,9 +1,9 @@
 #       $FreeBSD: src/sys/modules/uhid/Makefile,v 1.7 1999/11/28 18:53:30 bde Exp $ 
-#       $DragonFly: src/sys/dev/usbmisc/uhid/Makefile,v 1.3 2004/01/31 06:56:28 dillon Exp $ 
+#       $DragonFly: src/sys/dev/usbmisc/uhid/Makefile,v 1.4 2004/08/13 17:51:07 dillon Exp $ 
 
 .PATH:          ${.CURDIR}/../../dev/usb
 KMOD            = uhid
-SRCS            = bus_if.h device_if.h vnode_if.h opt_usb.h uhid.c
+SRCS            = bus_if.h device_if.h opt_usb.h uhid.c
 NOMAN           =
 
 .include <bsd.kmod.mk>
index 0bcc152..01050b2 100644 (file)
@@ -1,9 +1,9 @@
 #       $FreeBSD: src/sys/modules/ukbd/Makefile,v 1.10 2000/01/20 13:25:18 yokota Exp $ 
-#       $DragonFly: src/sys/dev/usbmisc/ukbd/Makefile,v 1.3 2004/01/31 06:56:31 dillon Exp $ 
+#       $DragonFly: src/sys/dev/usbmisc/ukbd/Makefile,v 1.4 2004/08/13 17:51:07 dillon Exp $ 
 
 .PATH:          ${.CURDIR}/../../dev/usb
 KMOD            = ukbd
-SRCS            = bus_if.h device_if.h vnode_if.h \
+SRCS            = bus_if.h device_if.h \
                   opt_usb.h opt_kbd.h opt_ukbd.h \
                   ukbd.c
 NOMAN           =
index 2115d99..f51c070 100644 (file)
@@ -1,9 +1,9 @@
 #       $FreeBSD: src/sys/modules/ulpt/Makefile,v 1.7 1999/11/28 18:53:32 bde Exp $ 
-#       $DragonFly: src/sys/dev/usbmisc/ulpt/Makefile,v 1.3 2004/01/31 06:56:32 dillon Exp $ 
+#       $DragonFly: src/sys/dev/usbmisc/ulpt/Makefile,v 1.4 2004/08/13 17:51:07 dillon Exp $ 
 
 .PATH:          ${.CURDIR}/../../dev/usb
 KMOD            = ulpt
-SRCS            = bus_if.h device_if.h vnode_if.h opt_usb.h ulpt.c
+SRCS            = bus_if.h device_if.h opt_usb.h ulpt.c
 NOMAN           =
 
 .include <bsd.kmod.mk>
index c0e507b..b697dfd 100644 (file)
@@ -1,9 +1,9 @@
 #       $FreeBSD: src/sys/modules/umodem/Makefile,v 1.7 1999/11/28 18:53:35 bde Exp $ 
-#       $DragonFly: src/sys/dev/usbmisc/umodem/Makefile,v 1.3 2004/01/31 06:56:35 dillon Exp $ 
+#       $DragonFly: src/sys/dev/usbmisc/umodem/Makefile,v 1.4 2004/08/13 17:51:07 dillon Exp $ 
 
 .PATH:          ${.CURDIR}/../../dev/usb
 KMOD            = umodem
-SRCS            = bus_if.h device_if.h vnode_if.h opt_usb.h umodem.c
+SRCS            = bus_if.h device_if.h opt_usb.h umodem.c
 NOMAN           =
 
 .include <bsd.kmod.mk>
index 83a91a3..a52a0b4 100644 (file)
@@ -1,9 +1,9 @@
 #       $FreeBSD: src/sys/modules/ums/Makefile,v 1.7 1999/11/28 18:53:37 bde Exp $ 
-#       $DragonFly: src/sys/dev/usbmisc/ums/Makefile,v 1.3 2004/01/31 06:56:35 dillon Exp $ 
+#       $DragonFly: src/sys/dev/usbmisc/ums/Makefile,v 1.4 2004/08/13 17:51:07 dillon Exp $ 
 
 .PATH:          ${.CURDIR}/../../dev/usb
 KMOD            = ums
-SRCS            = bus_if.h device_if.h vnode_if.h opt_usb.h ums.c
+SRCS            = bus_if.h device_if.h opt_usb.h ums.c
 NOMAN           =
 
 .include <bsd.kmod.mk>
index 25f2dd1..eeed9a7 100644 (file)
@@ -1,10 +1,10 @@
 # $FreeBSD: src/sys/modules/uplcom/Makefile,v 1.1.2.2 2002/08/11 20:05:20 joe Exp $
-# $DragonFly: src/sys/dev/usbmisc/uplcom/Makefile,v 1.3 2003/08/15 08:32:31 dillon Exp $
+# $DragonFly: src/sys/dev/usbmisc/uplcom/Makefile,v 1.4 2004/08/13 17:51:07 dillon Exp $
 
 .PATH: ${.CURDIR}/../ucom
 
 KMOD=  uplcom
-SRCS=  uplcom.c ucomvar.h opt_usb.h device_if.h bus_if.h vnode_if.h
+SRCS=  uplcom.c ucomvar.h opt_usb.h device_if.h bus_if.h
 NOMAN=
 KMODDEPS= ucom
 
index b8431ef..cb79e33 100644 (file)
@@ -1,9 +1,9 @@
 #       $FreeBSD: src/sys/modules/uscanner/Makefile,v 1.1.2.1 2000/10/31 23:16:08 n_hibma Exp $ 
-#       $DragonFly: src/sys/dev/usbmisc/uscanner/Makefile,v 1.3 2004/01/31 06:56:36 dillon Exp $ 
+#       $DragonFly: src/sys/dev/usbmisc/uscanner/Makefile,v 1.4 2004/08/13 17:51:07 dillon Exp $ 
 
 .PATH:          ${.CURDIR}/../../dev/usb
 KMOD            = uscanner
-SRCS            = bus_if.h device_if.h vnode_if.h opt_usb.h uscanner.c
+SRCS            = bus_if.h device_if.h opt_usb.h uscanner.c
 NOMAN           =
 
 CFLAGS         += -g
index e63142e..e49e6d8 100644 (file)
@@ -1,10 +1,10 @@
 # $FreeBSD: src/sys/modules/uvisor/Makefile,v 1.1.2.2 2002/08/11 20:05:20 joe Exp $
-# $DragonFly: src/sys/dev/usbmisc/uvisor/Makefile,v 1.3 2003/08/15 08:32:31 dillon Exp $
+# $DragonFly: src/sys/dev/usbmisc/uvisor/Makefile,v 1.4 2004/08/13 17:51:07 dillon Exp $
 
 .PATH: ${.CURDIR}/../ucom
 
 KMOD=  uvisor
-SRCS=  uvisor.c ucomvar.h opt_usb.h device_if.h bus_if.h vnode_if.h
+SRCS=  uvisor.c ucomvar.h opt_usb.h device_if.h bus_if.h
 NOMAN=
 KMODDEPS= ucom
 
index b0a4347..b31ee68 100644 (file)
@@ -1,10 +1,10 @@
 # $FreeBSD: src/sys/modules/uvscom/Makefile,v 1.1.2.2 2002/08/11 20:05:20 joe Exp $
-# $DragonFly: src/sys/dev/usbmisc/uvscom/Makefile,v 1.3 2003/08/15 08:32:31 dillon Exp $
+# $DragonFly: src/sys/dev/usbmisc/uvscom/Makefile,v 1.4 2004/08/13 17:51:08 dillon Exp $
 
 .PATH: ${.CURDIR}/../ucom
 
 KMOD=  uvscom
-SRCS=  uvscom.c ucomvar.h opt_usb.h device_if.h bus_if.h vnode_if.h
+SRCS=  uvscom.c ucomvar.h opt_usb.h device_if.h bus_if.h
 NOMAN=
 KMODDEPS= ucom
 
index 9b13319..d02aa33 100644 (file)
@@ -1,13 +1,13 @@
 # Makefile for the bktr Brooktree Bt848/Bt878 PCI video capture device
 
 # $FreeBSD: src/sys/modules/bktr/bktr/Makefile,v 1.1.2.3 2001/07/24 09:51:06 dd Exp $
-# $DragonFly: src/sys/dev/video/bktr/bktr/Makefile,v 1.4 2004/01/07 03:15:01 dillon Exp $
+# $DragonFly: src/sys/dev/video/bktr/bktr/Makefile,v 1.5 2004/08/13 17:51:08 dillon Exp $
 
 .PATH:  ${.CURDIR}/..
 KMOD=  bktr 
 SRCS=  bktr_core.c bktr_os.c bktr_audio.c bktr_tuner.c bktr_card.c \
        use_bktr.h opt_bktr.h use_smbus.h bus_if.h device_if.h \
-       pci_if.h vnode_if.h
+       pci_if.h
 CLEANFILES= use_bktr.h use_smbus.h
 KMODDEPS= bktr_mem
 
index 2c6f20e..37f4b0a 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/modules/ibcs2/Makefile,v 1.26.2.3 2002/08/07 16:31:56 ru Exp $
-# $DragonFly: src/sys/emulation/ibcs2/Attic/Makefile,v 1.3 2003/08/15 06:32:47 dillon Exp $
+# $DragonFly: src/sys/emulation/ibcs2/Attic/Makefile,v 1.4 2004/08/13 17:51:08 dillon Exp $
 
 .PATH: ${.CURDIR}/../../emulation/ibcs2/i386
 KMOD=  ibcs2
@@ -8,7 +8,7 @@ SRCS=   ibcs2_errno.c ibcs2_ipc.c ibcs2_stat.c ibcs2_misc.c \
        ibcs2_socksys.c ibcs2_util.c ibcs2_xenix.c ibcs2_xenix_sysent.c \
        ibcs2_isc.c ibcs2_isc_sysent.c \
        ibcs2_msg.c ibcs2_other.c ibcs2_sysi86.c ibcs2_sysvec.c \
-       vnode_if.h opt_spx_hack.h
+       opt_spx_hack.h
 MAN=   ibcs2.8
 
 CFLAGS+= -DCOMPAT_IBCS2
index 29a4e5b..9c3afcf 100644 (file)
@@ -1,9 +1,9 @@
 # $FreeBSD: src/sys/modules/coff/Makefile,v 1.10 1999/11/28 18:52:45 bde Exp $
-# $DragonFly: src/sys/emulation/ibcs2/coff/Attic/Makefile,v 1.2 2003/06/17 04:28:43 dillon Exp $
+# $DragonFly: src/sys/emulation/ibcs2/coff/Attic/Makefile,v 1.3 2004/08/13 17:51:08 dillon Exp $
 
 .PATH: ${.CURDIR}/../../i386/ibcs2
 KMOD=  ibcs2_coff
-SRCS=  imgact_coff.c vnode_if.h
+SRCS=  imgact_coff.c
 NOMAN=
 CFLAGS+=       -DCOMPAT_IBCS2
 KMODDEPS=      ibcs2
index 4962423..8b2732f 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/modules/linux/Makefile,v 1.34.2.12 2003/01/02 20:41:34 kan Exp $
-# $DragonFly: src/sys/emulation/linux/Makefile,v 1.5 2004/02/22 12:11:00 joerg Exp $
+# $DragonFly: src/sys/emulation/linux/Makefile,v 1.6 2004/08/13 17:51:08 dillon Exp $
 
 .PATH: ${.CURDIR}/../../emulation/linux ${.CURDIR}/../../emulation/linux/${MACHINE_ARCH}
 
@@ -8,7 +8,7 @@ KMOD=   linux
 SRCS=  linux_dummy.c linux_file.c linux_getcwd.c linux_ioctl.c linux_ipc.c \
        linux_machdep.c linux_mib.c linux_misc.c linux_signal.c linux_socket.c \
        linux_stats.c linux_sysctl.c linux_sysent.c linux_sysvec.c \
-       linux_util.c opt_compat.h opt_linux.h opt_vmpage.h vnode_if.h
+       linux_util.c opt_compat.h opt_linux.h opt_vmpage.h
 OBJS=  linux_locore.o
 MAN=   linux.8
 
index d0b9136..105c64f 100644 (file)
@@ -1,9 +1,9 @@
 # $FreeBSD: src/sys/modules/linprocfs/Makefile,v 1.1.2.3 2000/06/06 11:53:28 des Exp $
-# $DragonFly: src/sys/emulation/linux/i386/linprocfs/Makefile,v 1.5 2004/08/13 02:59:29 dillon Exp $
+# $DragonFly: src/sys/emulation/linux/i386/linprocfs/Makefile,v 1.6 2004/08/13 17:51:08 dillon Exp $
 
 .PATH: ${.CURDIR}/../../../../emulation/linux/i386/linprocfs
 KMOD=  linprocfs
-SRCS=  vnode_if.h linprocfs_misc.c linprocfs_subr.c \
+SRCS=  linprocfs_misc.c linprocfs_subr.c \
                linprocfs_vfsops.c linprocfs_vnops.c
 NOMAN=
 CFLAGS+= -DLINPROCFS
index f5b0dcd..fe9a2bd 100644 (file)
@@ -39,7 +39,7 @@
  *     @(#)procfs.h    8.9 (Berkeley) 5/14/95
  *
  * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs.h,v 1.2.2.4 2001/06/25 19:46:47 pirzyk Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs.h,v 1.6 2004/08/13 02:59:29 dillon Exp $
+ * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs.h,v 1.7 2004/08/13 17:51:08 dillon Exp $
  */
 
 /*
@@ -142,7 +142,7 @@ int linprocfs_validfile (struct proc *);
 #define PROCFS_LOCKED  0x01
 #define PROCFS_WANT    0x02
 
-extern vop_t **linprocfs_vnodeop_p;
+extern struct vop_ops *linprocfs_vnode_vops;
 
 int    linprocfs_root (struct mount *, struct vnode **);
 int    linprocfs_rw (struct vop_read_args *);
index d64eecd..9ba8b17 100644 (file)
@@ -39,7 +39,7 @@
  *     @(#)procfs_subr.c       8.6 (Berkeley) 5/14/95
  *
  * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_subr.c,v 1.3.2.4 2001/06/25 19:46:47 pirzyk Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_subr.c,v 1.9 2004/08/13 02:59:29 dillon Exp $
+ * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_subr.c,v 1.10 2004/08/13 17:51:08 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -124,7 +124,7 @@ loop:
         */
        MALLOC(pfs, struct pfsnode *, sizeof(struct pfsnode), M_TEMP, M_WAITOK);
 
-       if ((error = getnewvnode(VT_PROCFS, mp, linprocfs_vnodeop_p, vpp)) != 0) {
+       if ((error = getnewvnode(VT_PROCFS, mp, linprocfs_vnode_vops, vpp)) != 0) {
                FREE(pfs, M_TEMP);
                goto out;
        }
index 866d064..cda5777 100644 (file)
@@ -39,7 +39,7 @@
  *     @(#)procfs_vnops.c      8.18 (Berkeley) 5/21/95
  *
  * $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_vnops.c,v 1.3.2.5 2001/08/12 14:29:19 rwatson Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_vnops.c,v 1.14 2004/08/13 02:59:29 dillon Exp $
+ * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_vnops.c,v 1.15 2004/08/13 17:51:08 dillon Exp $
  */
 
 /*
@@ -1017,37 +1017,37 @@ atopid(b, len)
 /*
  * procfs vnode operations.
  */
-vop_t **linprocfs_vnodeop_p;
+struct vop_ops *linprocfs_vnode_vops;
 static struct vnodeopv_entry_desc linprocfs_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) vop_defaultop },
-       { &vop_access_desc,             (vop_t *) linprocfs_access },
-       { &vop_advlock_desc,            (vop_t *) linprocfs_badop },
-       { &vop_bmap_desc,               (vop_t *) linprocfs_bmap },
-       { &vop_close_desc,              (vop_t *) linprocfs_close },
-       { &vop_create_desc,             (vop_t *) linprocfs_badop },
-       { &vop_getattr_desc,            (vop_t *) linprocfs_getattr },
-       { &vop_inactive_desc,           (vop_t *) linprocfs_inactive },
-       { &vop_link_desc,               (vop_t *) linprocfs_badop },
-       { &vop_lookup_desc,             (vop_t *) linprocfs_lookup },
-       { &vop_mkdir_desc,              (vop_t *) linprocfs_badop },
-       { &vop_mknod_desc,              (vop_t *) linprocfs_badop },
-       { &vop_open_desc,               (vop_t *) linprocfs_open },
-       { &vop_pathconf_desc,           (vop_t *) vop_stdpathconf },
-       { &vop_print_desc,              (vop_t *) linprocfs_print },
-       { &vop_read_desc,               (vop_t *) linprocfs_rw },
-       { &vop_readdir_desc,            (vop_t *) linprocfs_readdir },
-       { &vop_readlink_desc,           (vop_t *) linprocfs_readlink },
-       { &vop_reclaim_desc,            (vop_t *) linprocfs_reclaim },
-       { &vop_remove_desc,             (vop_t *) linprocfs_badop },
-       { &vop_rename_desc,             (vop_t *) linprocfs_badop },
-       { &vop_rmdir_desc,              (vop_t *) linprocfs_badop },
-       { &vop_setattr_desc,            (vop_t *) linprocfs_setattr },
-       { &vop_symlink_desc,            (vop_t *) linprocfs_badop },
-       { &vop_write_desc,              (vop_t *) linprocfs_rw },
-       { &vop_ioctl_desc,              (vop_t *) linprocfs_ioctl },
+       { &vop_default_desc,            vop_defaultop },
+       { &vop_access_desc,             (void *) linprocfs_access },
+       { &vop_advlock_desc,            (void *) linprocfs_badop },
+       { &vop_bmap_desc,               (void *) linprocfs_bmap },
+       { &vop_close_desc,              (void *) linprocfs_close },
+       { &vop_create_desc,             (void *) linprocfs_badop },
+       { &vop_getattr_desc,            (void *) linprocfs_getattr },
+       { &vop_inactive_desc,           (void *) linprocfs_inactive },
+       { &vop_link_desc,               (void *) linprocfs_badop },
+       { &vop_lookup_desc,             (void *) linprocfs_lookup },
+       { &vop_mkdir_desc,              (void *) linprocfs_badop },
+       { &vop_mknod_desc,              (void *) linprocfs_badop },
+       { &vop_open_desc,               (void *) linprocfs_open },
+       { &vop_pathconf_desc,           (void *) vop_stdpathconf },
+       { &vop_print_desc,              (void *) linprocfs_print },
+       { &vop_read_desc,               (void *) linprocfs_rw },
+       { &vop_readdir_desc,            (void *) linprocfs_readdir },
+       { &vop_readlink_desc,           (void *) linprocfs_readlink },
+       { &vop_reclaim_desc,            (void *) linprocfs_reclaim },
+       { &vop_remove_desc,             (void *) linprocfs_badop },
+       { &vop_rename_desc,             (void *) linprocfs_badop },
+       { &vop_rmdir_desc,              (void *) linprocfs_badop },
+       { &vop_setattr_desc,            (void *) linprocfs_setattr },
+       { &vop_symlink_desc,            (void *) linprocfs_badop },
+       { &vop_write_desc,              (void *) linprocfs_rw },
+       { &vop_ioctl_desc,              (void *) linprocfs_ioctl },
        { NULL, NULL }
 };
 static struct vnodeopv_desc linprocfs_vnodeop_opv_desc =
-       { &linprocfs_vnodeop_p, linprocfs_vnodeop_entries };
+       { &linprocfs_vnode_vops, linprocfs_vnodeop_entries };
 
 VNODEOP_SET(linprocfs_vnodeop_opv_desc);
index 8d42521..dcebb4d 100644 (file)
@@ -1,9 +1,9 @@
-# $DragonFly: src/sys/emulation/ndis/Makefile,v 1.1 2004/07/29 20:51:33 dillon Exp $
+# $DragonFly: src/sys/emulation/ndis/Makefile,v 1.2 2004/08/13 17:51:08 dillon Exp $
 #
 
 KMOD=  ndis
 SRCS=  subr_pe.c subr_ndis.c subr_hal.c subr_ntoskrnl.c kern_ndis.c
-SRCS+= opt_bdg.h device_if.h bus_if.h pci_if.h vnode_if.h
+SRCS+= opt_bdg.h device_if.h bus_if.h pci_if.h
 
 .include <bsd.kmod.mk>
 
index 2cb7320..cd8e088 100644 (file)
@@ -1,7 +1,7 @@
 # Makefile for syscall tables
 #
 # $FreeBSD: src/sys/svr4/Makefile,v 1.3 1999/09/01 00:32:18 newton Exp $
-# $DragonFly: src/sys/emulation/svr4/Attic/Makefile,v 1.8 2004/02/16 20:48:35 dillon Exp $
+# $DragonFly: src/sys/emulation/svr4/Attic/Makefile,v 1.9 2004/08/13 17:51:09 dillon Exp $
 
 # This builds the module
 #
@@ -10,7 +10,7 @@
 ARCH=  arch_svr4
 KMOD=  svr4
 SRCS=  svr4_sysent.c svr4_sysvec.c opt_compat.h opt_svr4.h opt_vmpage.h \
-       vnode_if.h imgact_svr4.c svr4_signal.c svr4_fcntl.c svr4_misc.c \
+       imgact_svr4.c svr4_signal.c svr4_fcntl.c svr4_misc.c \
        svr4_ioctl.c svr4_stat.c svr4_filio.c svr4_ttold.c svr4_termios.c \
        svr4_stream.c svr4_socket.c svr4_sockio.c svr4_machdep.c \
        svr4_resource.c svr4_ipc.c
index 7109036..887ed92 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * $FreeBSD: src/sys/kern/vfs_default.c,v 1.28.2.7 2003/01/10 18:23:26 bde Exp $
- * $DragonFly: src/sys/kern/vfs_default.c,v 1.10 2004/05/19 22:52:58 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_default.c,v 1.11 2004/08/13 17:51:09 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -71,40 +71,40 @@ static int  vop_nostrategy (struct vop_strategy_args *);
  *
  */
 
-vop_t **default_vnodeop_p;
+struct vop_ops *default_vnode_vops;
 static struct vnodeopv_entry_desc default_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) vop_eopnotsupp },
-       { &vop_advlock_desc,            (vop_t *) vop_einval },
-       { &vop_bwrite_desc,             (vop_t *) vop_stdbwrite },
-       { &vop_close_desc,              (vop_t *) vop_null },
-       { &vop_createvobject_desc,      (vop_t *) vop_stdcreatevobject },
-       { &vop_destroyvobject_desc,     (vop_t *) vop_stddestroyvobject },
-       { &vop_fsync_desc,              (vop_t *) vop_null },
-       { &vop_getvobject_desc,         (vop_t *) vop_stdgetvobject },
-       { &vop_ioctl_desc,              (vop_t *) vop_enotty },
-       { &vop_islocked_desc,           (vop_t *) vop_noislocked },
-       { &vop_lease_desc,              (vop_t *) vop_null },
-       { &vop_lock_desc,               (vop_t *) vop_nolock },
-       { &vop_mmap_desc,               (vop_t *) vop_einval },
-       { &vop_lookup_desc,             (vop_t *) vop_nolookup },
-       { &vop_open_desc,               (vop_t *) vop_null },
-       { &vop_pathconf_desc,           (vop_t *) vop_einval },
-       { &vop_poll_desc,               (vop_t *) vop_nopoll },
-       { &vop_readlink_desc,           (vop_t *) vop_einval },
-       { &vop_reallocblks_desc,        (vop_t *) vop_eopnotsupp },
-       { &vop_revoke_desc,             (vop_t *) vop_revoke },
-       { &vop_strategy_desc,           (vop_t *) vop_nostrategy },
-       { &vop_unlock_desc,             (vop_t *) vop_nounlock },
-       { &vop_getacl_desc,             (vop_t *) vop_eopnotsupp },
-       { &vop_setacl_desc,             (vop_t *) vop_eopnotsupp },
-       { &vop_aclcheck_desc,           (vop_t *) vop_eopnotsupp },
-       { &vop_getextattr_desc,         (vop_t *) vop_eopnotsupp },
-       { &vop_setextattr_desc,         (vop_t *) vop_eopnotsupp },
+       { &vop_default_desc,            vop_eopnotsupp },
+       { &vop_advlock_desc,            vop_einval },
+       { &vop_bwrite_desc,             (void *) vop_stdbwrite },
+       { &vop_close_desc,              vop_null },
+       { &vop_createvobject_desc,      (void *) vop_stdcreatevobject },
+       { &vop_destroyvobject_desc,     (void *) vop_stddestroyvobject },
+       { &vop_fsync_desc,              vop_null },
+       { &vop_getvobject_desc,         (void *) vop_stdgetvobject },
+       { &vop_ioctl_desc,              vop_enotty },
+       { &vop_islocked_desc,           (void *) vop_noislocked },
+       { &vop_lease_desc,              vop_null },
+       { &vop_lock_desc,               (void *) vop_nolock },
+       { &vop_mmap_desc,               vop_einval },
+       { &vop_lookup_desc,             (void *) vop_nolookup },
+       { &vop_open_desc,               vop_null },
+       { &vop_pathconf_desc,           vop_einval },
+       { &vop_poll_desc,               (void *) vop_nopoll },
+       { &vop_readlink_desc,           vop_einval },
+       { &vop_reallocblks_desc,        vop_eopnotsupp },
+       { &vop_revoke_desc,             (void *) vop_stdrevoke },
+       { &vop_strategy_desc,           (void *) vop_nostrategy },
+       { &vop_unlock_desc,             (void *) vop_nounlock },
+       { &vop_getacl_desc,             vop_eopnotsupp },
+       { &vop_setacl_desc,             vop_eopnotsupp },
+       { &vop_aclcheck_desc,           vop_eopnotsupp },
+       { &vop_getextattr_desc,         vop_eopnotsupp },
+       { &vop_setextattr_desc,         vop_eopnotsupp },
        { NULL, NULL }
 };
 
 static struct vnodeopv_desc default_vnodeop_opv_desc =
-        { &default_vnodeop_p, default_vnodeop_entries };
+        { &default_vnode_vops, default_vnodeop_entries };
 
 VNODEOP_SET(default_vnodeop_opv_desc);
 
@@ -114,43 +114,37 @@ vop_eopnotsupp(struct vop_generic_args *ap)
        /*
        printf("vop_notsupp[%s]\n", ap->a_desc->vdesc_name);
        */
-
        return (EOPNOTSUPP);
 }
 
 int
 vop_ebadf(struct vop_generic_args *ap)
 {
-
        return (EBADF);
 }
 
 int
 vop_enotty(struct vop_generic_args *ap)
 {
-
        return (ENOTTY);
 }
 
 int
 vop_einval(struct vop_generic_args *ap)
 {
-
        return (EINVAL);
 }
 
 int
 vop_null(struct vop_generic_args *ap)
 {
-
        return (0);
 }
 
 int
 vop_defaultop(struct vop_generic_args *ap)
 {
-
-       return (VOCALL(default_vnodeop_p, ap->a_desc->vdesc_offset, ap));
+       return (VOCALL(default_vnode_vops, ap->a_desc->vdesc_offset, ap));
 }
 
 int
index 83950ae..e9f7ff0 100644 (file)
@@ -1,4 +1,37 @@
 /*
+ * Copyright (c) 2003,2004 The DragonFly Project.  All rights reserved.
+ * 
+ * This code is derived from software contributed to The DragonFly Project
+ * by Matthew Dillon <dillon@backplane.com>
+ * 
+ * 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 DragonFly Project 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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.
+ *
+ *
  * Copyright (c) 1989, 1993
  *     The Regents of the University of California.  All rights reserved.
  *
  *
  *     @(#)vfs_init.c  8.3 (Berkeley) 1/4/94
  * $FreeBSD: src/sys/kern/vfs_init.c,v 1.59 2002/04/30 18:44:32 dillon Exp $
- * $DragonFly: src/sys/kern/vfs_init.c,v 1.4 2004/03/16 18:42:35 hmp Exp $
+ * $DragonFly: src/sys/kern/vfs_init.c,v 1.5 2004/08/13 17:51:09 dillon Exp $
+ */
+/*
+ * Manage vnode VOP operations vectors
  */
-
-
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -50,7 +84,6 @@
 #include <sys/malloc.h>
 #include <vm/vm_zone.h>
 
-
 MALLOC_DEFINE(M_VNODE, "vnodes", "Dynamically allocated vnodes");
 
 /*
@@ -65,308 +98,116 @@ struct vm_zone *namei_zone;
 int maxvfsconf;
 struct vfsconf *vfsconf;
 
-/*
- * vfs_init.c
- *
- * Allocate and fill in operations vectors.
- *
- * An undocumented feature of this approach to defining operations is that
- * there can be multiple entries in vfs_opv_descs for the same operations
- * vector. This allows third parties to extend the set of operations
- * supported by another layer in a binary compatibile way. For example,
- * assume that NFS needed to be modified to support Ficus. NFS has an entry
- * (probably nfs_vnopdeop_decls) declaring all the operations NFS supports by
- * default. Ficus could add another entry (ficus_nfs_vnodeop_decl_entensions)
- * listing those new operations Ficus adds to NFS, all without modifying the
- * NFS code. (Of couse, the OTW NFS protocol still needs to be munged, but
- * that is a(whole)nother story.) This is a feature.
- */
-
-/* Table of known vnodeop vectors (list of VFS vnode vectors) */
-static const struct vnodeopv_desc **vnodeopv_descs;
-static int vnodeopv_num;
-
-/* Table of known descs (list of vnode op handlers "vop_access_desc") */
-static struct vnodeop_desc **vfs_op_descs;
-static int *vfs_op_desc_refs;                  /* reference counts */
-static int num_op_descs;
-
-/*
- * Allocate at least vfs_opv_numops number of VFS operation
- * vectors.  The vector is never freed or deallocted once
- * it is initalised, so the vnodes might safely reference
- * it through their v_op pointer without the vector changing
- * suddenly from under them.
- *
- * Allow this number to be tuned at boot.
- */
-static int vfs_opv_numops = 96;
-TUNABLE_INT("vfs.opv_numops", &vfs_opv_numops);
-SYSCTL_INT(_vfs, OID_AUTO, opv_numops, CTLFLAG_RD, &vfs_opv_numops,
-       0, "Maximum number of operations in vop_t vector");
-
-static __inline int
-int_cmp(const void *a, const void *b)
-{
-       return(*(const int *)a - *(const int *)b);
-}
+static TAILQ_HEAD(, vnodeopv_node) vnodeopv_list;
+static void vfs_recalc_vnodeops(void);
 
 /*
- * Recalculate parts of the VFS operations vector (vfsops).
+ * Add a vnode operations (vnops) vector to the global list.
  */
-static void
-vfs_opv_recalc(void)
+void
+vfs_add_vnodeops(const void *data)
 {
-       int i, j, k;
-       int *vfs_op_offsets;
-       vop_t ***opv_desc_vector_p;
-       vop_t **opv_desc_vector;
-       struct vnodeopv_entry_desc *opve_descp;
-       const struct vnodeopv_desc *opv;
-
-       if (vfs_op_descs == NULL)
-               panic("vfs_opv_recalc called with null vfs_op_descs");
-
-       /*
-        * Allocate and initialize temporary array to store
-        * offsets. Sort it to put all uninitialized entries
-        * first and to make holes in existing offset sequence
-        * detectable.
-        */
-       MALLOC(vfs_op_offsets, int *,
-               num_op_descs * sizeof(int), M_VNODE, M_WAITOK);
-       if (vfs_op_offsets == NULL)
-               panic("vfs_opv_recals: no memory");
-       for (i = 0; i < num_op_descs; i++)
-               vfs_op_offsets[i] = vfs_op_descs[i]->vdesc_offset;
-       qsort(vfs_op_offsets, num_op_descs, sizeof(int), int_cmp);
-
-       /*
-        * Run through and make sure all known descs have an offset.
-        * Use vfs_op_offsets to locate the holes in offset sequence
-        * and reuse them.
-        *
-        * vop_default_desc is at hardwired at offset 1, and offset
-        * 0 is a panic sanity check.
-        */
-       j = k = 1;
-       for (i = 0; i < num_op_descs; i++) {
-               if (vfs_op_descs[i]->vdesc_offset != 0)
-                       continue;
-               /*
-                * Look at two adjacent entries vfs_op_offsets[j - 1] and
-                * vfs_op_offsets[j] and see if we can fit a new offset
-                * number in between. If not, look at the next pair until
-                * hole is found or the end of the vfs_op_offsets vector is
-                * reached. j has been initialized to 1 above so that
-                * referencing (j-1)-th element is safe and the loop will
-                * never execute if num_op_descs is 1. For each new value s
-                * of i the j loop pick up from where previous iteration has
-                * left off. When the last hole has been consumed or if no
-                * hole has been found, we will start allocating new numbers
-                * starting from the biggest already available offset + 1.
-                */
-               for (; j < num_op_descs; j++) {
-                       if (vfs_op_offsets[j - 1] < k && vfs_op_offsets[j] > k)
-                               break;
-                       k = vfs_op_offsets[j] + 1;
-               }
-               vfs_op_descs[i]->vdesc_offset = k++;
-       }
-       FREE(vfs_op_offsets, M_VNODE);
-
-       /* Panic if new VFSops will cause vector overflow */
-       if (k > vfs_opv_numops)
-               panic("VFS: Ran out of vop_t vector entries. "
-                     "%d entries required, only %d available.",
-                     k, vfs_opv_numops);
-
-       /*
-        * Allocate and fill in the vectors
-        */
-       for (i = 0; i < vnodeopv_num; i++) {
-               opv = vnodeopv_descs[i];
-               opv_desc_vector_p = opv->opv_desc_vector_p;
-               if (*opv_desc_vector_p == NULL)
-                       MALLOC(*opv_desc_vector_p, vop_t **,
-                               vfs_opv_numops * sizeof(vop_t *), M_VNODE,
-                               M_WAITOK | M_ZERO);
-               if (*opv_desc_vector_p == NULL)
-                       panic("no memory for vop_t ** vector");
-
-               /* Fill in, with slot 0 being to return EOPNOTSUPP */
-               opv_desc_vector = *opv_desc_vector_p;
-               opv_desc_vector[0] = (vop_t *)vop_eopnotsupp;
-               for (j = 0; opv->opv_desc_ops[j].opve_op; j++) {
-                       opve_descp = &(opv->opv_desc_ops[j]);
-                       opv_desc_vector[opve_descp->opve_op->vdesc_offset] =
-                               opve_descp->opve_impl;
-               }
-
-               /* Replace unfilled routines with their default (slot 1). */
-               opv_desc_vector = *(opv->opv_desc_vector_p);
-               if (opv_desc_vector[1] == NULL)
-                       panic("vfs_opv_recalc: vector without a default.");
-               for (j = 0; j < vfs_opv_numops; j++)
-                       if (opv_desc_vector[j] == NULL)
-                               opv_desc_vector[j] = opv_desc_vector[1];
+       struct vnodeopv_node *node;
+       struct vop_ops *vops;
+
+       node = malloc(sizeof(struct vnodeopv_node), M_VNODE, M_ZERO|M_WAITOK);
+       node->vdesc = data;
+       if ((vops = *node->vdesc->opv_desc_vector) == NULL) {
+               vops = malloc(sizeof(struct vop_ops), M_VNODE, M_ZERO|M_WAITOK);
+               *node->vdesc->opv_desc_vector = vops;
        }
+       ++vops->vv_refs;
+       TAILQ_INSERT_TAIL(&vnodeopv_list, node, entry);
+       vfs_recalc_vnodeops();
 }
 
 /*
- * Add a vnode operations (vnops) vector to the global list.
+ * Unlink previously added vnode operations vector.
  */
 void
-vfs_add_vnodeops(const void *data)
+vfs_rm_vnodeops(const void *data)
 {
-       const struct vnodeopv_desc *opv;
-       const struct vnodeopv_desc **newopv;
-       struct vnodeop_desc **newop;
-       int *newref;
-       struct vnodeop_desc *desc;
-       int i, j;
+       struct vnodeopv_node *node;
+       struct vop_ops *vops;
 
-       opv = (const struct vnodeopv_desc *)data;
-       MALLOC(newopv, const struct vnodeopv_desc **,
-              (vnodeopv_num + 1) * sizeof(*newopv), M_VNODE, M_WAITOK);
-       if (newopv == NULL)
-               panic("vfs_add_vnodeops: no memory");
-       if (vnodeopv_descs) {
-               bcopy(vnodeopv_descs, newopv, vnodeopv_num * sizeof(*newopv));
-               FREE(vnodeopv_descs, M_VNODE);
+       TAILQ_FOREACH(node, &vnodeopv_list, entry) {
+               if ((const void *)node->vdesc == data)
+                       break;
        }
-       newopv[vnodeopv_num] = opv;
-       vnodeopv_descs = newopv;
-       vnodeopv_num++;
-
-       /* See if we have turned up a new vnode op desc */
-       for (i = 0; (desc = opv->opv_desc_ops[i].opve_op); i++) {
-               for (j = 0; j < num_op_descs; j++) {
-                       if (desc == vfs_op_descs[j]) {
-                               /* found it, increase reference count */
-                               vfs_op_desc_refs[j]++;
-                               break;
-                       }
-               }
-               if (j == num_op_descs) {
-                       /* not found, new entry */
-                       MALLOC(newop, struct vnodeop_desc **,
-                              (num_op_descs + 1) * sizeof(*newop),
-                              M_VNODE, M_WAITOK);
-                       if (newop == NULL)
-                               panic("vfs_add_vnodeops: no memory for desc");
-                       /* new reference count (for unload) */
-                       MALLOC(newref, int *,
-                               (num_op_descs + 1) * sizeof(*newref),
-                               M_VNODE, M_WAITOK);
-                       if (newref == NULL)
-                               panic("vfs_add_vnodeops: no memory for refs");
-                       if (vfs_op_descs) {
-                               bcopy(vfs_op_descs, newop,
-                                       num_op_descs * sizeof(*newop));
-                               FREE(vfs_op_descs, M_VNODE);
-                       }
-                       if (vfs_op_desc_refs) {
-                               bcopy(vfs_op_desc_refs, newref,
-                                       num_op_descs * sizeof(*newref));
-                               FREE(vfs_op_desc_refs, M_VNODE);
-                       }
-                       newop[num_op_descs] = desc;
-                       newref[num_op_descs] = 1;
-                       vfs_op_descs = newop;
-                       vfs_op_desc_refs = newref;
-                       num_op_descs++;
-               }
+       if (node == NULL) {
+               printf("vfs_rm_vnodeops: unable to find vnodeopv_desc: %p\n",
+                       data);
+               return;
+       }
+       TAILQ_REMOVE(&vnodeopv_list, node, entry);
+       vops = *node->vdesc->opv_desc_vector;
+       KKASSERT(vops != NULL && vops->vv_refs > 0);
+       if (--vops->vv_refs == 0) {
+               *node->vdesc->opv_desc_vector = NULL;
+               free(vops, M_VNODE);
        }
-       vfs_opv_recalc();
+       free(node, M_VNODE);
+       vfs_recalc_vnodeops();
 }
 
 /*
- * Unlink previously added vnode operations vector.
+ * Recalculate VFS operations vectors
  */
-void
-vfs_rm_vnodeops(const void *data)
+static void
+vfs_recalc_vnodeops(void)
 {
-       const struct vnodeopv_desc *opv;
-       const struct vnodeopv_desc **newopv;
-       struct vnodeop_desc **newop;
-       int *newref;
-       vop_t **opv_desc_vector;
-       struct vnodeop_desc *desc;
-       int i, j, k;
+       struct vnodeopv_node *node;
+       struct vnodeopv_entry_desc *desc;
+       struct vop_ops *vops;
+       struct vop_ops *vnew;
+       int off;
 
-       opv = (const struct vnodeopv_desc *)data;
-       /* Lower ref counts on descs in the table and release if zero */
-       for (i = 0; (desc = opv->opv_desc_ops[i].opve_op); i++) {
-               for (j = 0; j < num_op_descs; j++) {
-                       if (desc == vfs_op_descs[j]) {
-                               /* found it, decrease reference count */
-                               vfs_op_desc_refs[j]--;
-                               break;
-                       }
+       /*
+        * Because vop_ops may be active we can't just blow them away, we
+        * have to generate new vop_ops and then copy them into the running
+        * vop_ops.  Any missing entries will be assigned to the default
+        * entry.  If the default entry itself is missing it will be assigned
+        * to vop_eopnotsupp.
+        */
+       TAILQ_FOREACH(node, &vnodeopv_list, entry) {
+               vops = *node->vdesc->opv_desc_vector;
+               if ((vnew = vops->vv_new) == NULL) {
+                       vnew = malloc(sizeof(struct vop_ops),
+                                       M_VNODE, M_ZERO|M_WAITOK);
+                       vops->vv_new = vnew;
+                       vnew->vop_default = vop_eopnotsupp;
+               }
+               for (desc = node->vdesc->opv_desc_ops; desc->opve_op; ++desc) {
+                       off = desc->opve_op->vdesc_offset;
+                       *(void **)((char *)vnew + off) = desc->opve_func;
                }
-               for (j = 0; j < num_op_descs; j++) {
-                       if (vfs_op_desc_refs[j] > 0)
-                               continue;
-                       if (vfs_op_desc_refs[j] < 0)
-                               panic("vfs_remove_vnodeops: negative refcnt");
-                       /* Entry is going away - replace it with defaultop */
-                       for (k = 0; k < vnodeopv_num; k++) {
-                               opv_desc_vector = 
-                                       *(vnodeopv_descs[k]->opv_desc_vector_p);
-                               if (opv_desc_vector != NULL)
-                                       opv_desc_vector[desc->vdesc_offset] =
-                                               opv_desc_vector[1];
-                       }
-                       MALLOC(newop, struct vnodeop_desc **,
-                              (num_op_descs - 1) * sizeof(*newop),
-                              M_VNODE, M_WAITOK);
-                       if (newop == NULL)
-                               panic("vfs_remove_vnodeops: no memory for desc");
-                       /* new reference count (for unload) */
-                       MALLOC(newref, int *,
-                               (num_op_descs - 1) * sizeof(*newref),
-                               M_VNODE, M_WAITOK);
-                       if (newref == NULL)
-                               panic("vfs_remove_vnodeops: no memory for refs");
-                       for (k = j; k < (num_op_descs - 1); k++) {
-                               vfs_op_descs[k] = vfs_op_descs[k + 1];
-                               vfs_op_desc_refs[k] = vfs_op_desc_refs[k + 1];
-                       }
-                       bcopy(vfs_op_descs, newop,
-                               (num_op_descs - 1) * sizeof(*newop));
-                       bcopy(vfs_op_desc_refs, newref,
-                               (num_op_descs - 1) * sizeof(*newref));
-                       FREE(vfs_op_descs, M_VNODE);
-                       FREE(vfs_op_desc_refs, M_VNODE);
-                       vfs_op_descs = newop;
-                       vfs_op_desc_refs = newref;
-                       num_op_descs--;
+               for (off = __offsetof(struct vop_ops, vop_ops_first_field);
+                    off <= __offsetof(struct vop_ops, vop_ops_last_field);
+                    off += sizeof(void **)
+               ) {
+                       if (*(void **)((char *)vnew + off) == NULL)
+                           *(void **)((char *)vnew + off) = vnew->vop_default;
                }
        }
 
-       for (i = 0; i < vnodeopv_num; i++) {
-               if (vnodeopv_descs[i] == opv) {
-                       for (j = i; j < (vnodeopv_num - 1); j++)
-                               vnodeopv_descs[j] = vnodeopv_descs[j + 1];
-                       break;
+       /*
+        * Copy the temporary vops into the running configuration and then
+        * delete them.
+        */
+       TAILQ_FOREACH(node, &vnodeopv_list, entry) {
+               vops = *node->vdesc->opv_desc_vector;
+               if ((vnew = vops->vv_new) == NULL)
+                       continue;
+               for (off = __offsetof(struct vop_ops, vop_ops_first_field);
+                    off <= __offsetof(struct vop_ops, vop_ops_last_field);
+                    off += sizeof(void **)
+               ) {
+                       *(void **)((char *)vops + off) = 
+                               *(void **)((char *)vnew + off);
                }
+               vops->vv_new = NULL;
+               free(vnew, M_VNODE);
        }
-       if (i == vnodeopv_num)
-               panic("vfs_remove_vnodeops: opv not found");
-       opv_desc_vector = *(opv->opv_desc_vector_p);
-       if (opv_desc_vector != NULL)
-               FREE(opv_desc_vector, M_VNODE);
-       MALLOC(newopv, const struct vnodeopv_desc **,
-              (vnodeopv_num - 1) * sizeof(*newopv), M_VNODE, M_WAITOK);
-       if (newopv == NULL)
-               panic("vfs_remove_vnodeops: no memory");
-       bcopy(vnodeopv_descs, newopv, (vnodeopv_num - 1) * sizeof(*newopv));
-       FREE(vnodeopv_descs, M_VNODE);
-       vnodeopv_descs = newopv;
-       vnodeopv_num--;
-
-       vfs_opv_recalc();
 }
 
 /*
@@ -381,7 +222,7 @@ struct vattr va_null;
 static void
 vfsinit(void *dummy)
 {
-
+       TAILQ_INIT(&vnodeopv_list);
        namei_zone = zinit("NAMEI", MAXPATHLEN, 0, 0, 2);
 
        /*
index cf4e3f6..8d648c8 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)vfs_subr.c  8.31 (Berkeley) 5/26/95
  * $FreeBSD: src/sys/kern/vfs_subr.c,v 1.249.2.30 2003/04/04 20:35:57 tegge Exp $
- * $DragonFly: src/sys/kern/vfs_subr.c,v 1.35 2004/07/10 16:29:45 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_subr.c,v 1.36 2004/08/13 17:51:09 dillon Exp $
  */
 
 /*
@@ -619,14 +619,14 @@ SYSINIT(vnlru, SI_SUB_KTHREAD_UPDATE, SI_ORDER_FIRST, kproc_start, &vnlru_kp)
 /*
  * Routines having to do with the management of the vnode table.
  */
-extern vop_t **dead_vnodeop_p;
+extern struct vop_ops *dead_vnode_vops;
 
 /*
  * Return the next vnode from the free list.
  */
 int
 getnewvnode(enum vtagtype tag, struct mount *mp, 
-           vop_t **vops, struct vnode **vpp)
+           struct vop_ops *vops, struct vnode **vpp)
 {
        int s;
        struct thread *td = curthread;  /* XXX */
@@ -802,7 +802,7 @@ getnewvnode(enum vtagtype tag, struct mount *mp,
        TAILQ_INIT(&vp->v_dirtyblkhd);
        vp->v_type = VNON;
        vp->v_tag = tag;
-       vp->v_op = vops;
+       vp->v_vops = vops;
        *vpp = vp;
        vp->v_usecount = 1;
        vp->v_data = NULL;
@@ -1522,7 +1522,7 @@ bdevvp(dev_t dev, struct vnode **vpp)
                *vpp = NULLVP;
                return (ENXIO);
        }
-       error = getnewvnode(VT_NON, (struct mount *)0, spec_vnodeop_p, &nvp);
+       error = getnewvnode(VT_NON, (struct mount *)0, spec_vnode_vops, &nvp);
        if (error) {
                *vpp = NULLVP;
                return (error);
@@ -1992,7 +1992,7 @@ vflush_scan(struct mount *mp, struct vnode *vp,
                        vgonel(vp, vlock, info->td);
                } else {
                        vclean(vp, vlock, 0, info->td);
-                       vp->v_op = spec_vnodeop_p;
+                       vp->v_vops = spec_vnode_vops;
                        insmntque(vp, (struct mount *) 0);
                }
                return(0);
@@ -2094,7 +2094,7 @@ vclean(struct vnode *vp, lwkt_tokref_t vlock, int flags, struct thread *td)
        /*
         * Done with purge, notify sleepers of the grim news.
         */
-       vp->v_op = dead_vnodeop_p;
+       vp->v_vops = dead_vnode_vops;
        vn_pollgone(vp);
        vp->v_tag = VT_NON;
        vp->v_flag &= ~VXLOCK;
@@ -2113,7 +2113,7 @@ vclean(struct vnode *vp, lwkt_tokref_t vlock, int flags, struct thread *td)
  * revoke { struct vnode *a_vp, int a_flags }
  */
 int
-vop_revoke(struct vop_revoke_args *ap)
+vop_stdrevoke(struct vop_revoke_args *ap)
 {
        struct vnode *vp, *vq;
        lwkt_tokref ilock;
@@ -3075,21 +3075,21 @@ static int      sync_reclaim  (struct  vop_reclaim_args *);
 static int     sync_print (struct vop_print_args *);
 #define sync_islocked ((int(*) (struct vop_islocked_args *))vop_noislocked)
 
-static vop_t **sync_vnodeop_p;
+static struct vop_ops *sync_vnode_vops;
 static struct vnodeopv_entry_desc sync_vnodeop_entries[] = {
-       { &vop_default_desc,    (vop_t *) vop_eopnotsupp },
-       { &vop_close_desc,      (vop_t *) sync_close },         /* close */
-       { &vop_fsync_desc,      (vop_t *) sync_fsync },         /* fsync */
-       { &vop_inactive_desc,   (vop_t *) sync_inactive },      /* inactive */
-       { &vop_reclaim_desc,    (vop_t *) sync_reclaim },       /* reclaim */
-       { &vop_lock_desc,       (vop_t *) sync_lock },          /* lock */
-       { &vop_unlock_desc,     (vop_t *) sync_unlock },        /* unlock */
-       { &vop_print_desc,      (vop_t *) sync_print },         /* print */
-       { &vop_islocked_desc,   (vop_t *) sync_islocked },      /* islocked */
+       { &vop_default_desc,    vop_eopnotsupp },
+       { &vop_close_desc,      (void *) sync_close },          /* close */
+       { &vop_fsync_desc,      (void *) sync_fsync },          /* fsync */
+       { &vop_inactive_desc,   (void *) sync_inactive },       /* inactive */
+       { &vop_reclaim_desc,    (void *) sync_reclaim },        /* reclaim */
+       { &vop_lock_desc,       (void *) sync_lock },           /* lock */
+       { &vop_unlock_desc,     (void *) sync_unlock },         /* unlock */
+       { &vop_print_desc,      (void *) sync_print },          /* print */
+       { &vop_islocked_desc,   (void *) sync_islocked },       /* islocked */
        { NULL, NULL }
 };
 static struct vnodeopv_desc sync_vnodeop_opv_desc =
-       { &sync_vnodeop_p, sync_vnodeop_entries };
+       { &sync_vnode_vops, sync_vnodeop_entries };
 
 VNODEOP_SET(sync_vnodeop_opv_desc);
 
@@ -3109,7 +3109,7 @@ vfs_allocate_syncvnode(struct mount *mp)
        int error;
 
        /* Allocate a new vnode */
-       if ((error = getnewvnode(VT_VFS, mp, sync_vnodeop_p, &vp)) != 0) {
+       if ((error = getnewvnode(VT_VFS, mp, sync_vnode_vops, &vp)) != 0) {
                mp->mnt_syncer = NULL;
                return (error);
        }
diff --git a/sys/kern/vfs_vopops.c b/sys/kern/vfs_vopops.c
new file mode 100644 (file)
index 0000000..72e4300
--- /dev/null
@@ -0,0 +1,947 @@
+/*
+ * 
+ * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
+ * 
+ * This code is derived from software contributed to The DragonFly Project
+ * by Matthew Dillon <dillon@backplane.com>
+ * 
+ * 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 DragonFly Project 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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.
+ * 
+ * $DragonFly: src/sys/kern/vfs_vopops.c,v 1.1 2004/08/13 17:51:09 dillon Exp $
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/buf.h>
+#include <sys/conf.h>
+#include <sys/dirent.h>
+#include <sys/domain.h>
+#include <sys/eventhandler.h>
+#include <sys/fcntl.h>
+#include <sys/kernel.h>
+#include <sys/kthread.h>
+#include <sys/malloc.h>
+#include <sys/mbuf.h>
+#include <sys/mount.h>
+#include <sys/proc.h>
+#include <sys/namei.h>
+#include <sys/reboot.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/sysctl.h>
+#include <sys/syslog.h>
+#include <sys/vmmeter.h>
+#include <sys/vnode.h>
+#include <sys/vopops.h>
+
+#include <machine/limits.h>
+
+#include <vm/vm.h>
+#include <vm/vm_object.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
+#include <vm/pmap.h>
+#include <vm/vm_map.h>
+#include <vm/vm_page.h>
+#include <vm/vm_pager.h>
+#include <vm/vnode_pager.h>
+#include <vm/vm_zone.h>
+
+#include <sys/buf2.h>
+#include <sys/thread2.h>
+
+#define VOFFNAME(name) __CONCAT(__CONCAT(vop_,name),_vp_offsets)
+#define VDESCNAME(name)        __CONCAT(__CONCAT(vop_,name),_desc)
+#define VARGSSTRUCT(name) struct __CONCAT(__CONCAT(vop_,name),_args)
+
+#define VNODEOP_DESC_INIT(name, flags, vpoffs, vpp, cred, proc, comp)  \
+       struct vnodeop_desc VDESCNAME(name) = {                         \
+               __offsetof(struct vop_ops, __CONCAT(vop_, name)),       \
+               #name, flags, vpoffs, vpp, cred, proc, comp }
+
+#define VNODEOP_DESC_INIT_SIMPLE(name)                                 \
+       VNODEOP_DESC_INIT(name, 0, NULL,                                \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET)
+
+#define VNODEOP_DESC_INIT_VP(name)                                     \
+       static int VOFFNAME(name)[] = {                                 \
+               __offsetof(VARGSSTRUCT(name), a_vp),                    \
+               VDESC_NO_OFFSET };                                      \
+       VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET)
+
+#define VNODEOP_DESC_INIT_VP_VPP(name)                                 \
+       static int VOFFNAME(name)[] = {                                 \
+               __offsetof(VARGSSTRUCT(name), a_vp),                    \
+               VDESC_NO_OFFSET };                                      \
+       VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
+               __offsetof(VARGSSTRUCT(name), a_vpp),                   \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET)
+
+#define VNODEOP_DESC_INIT_VP_CRED(name)                                        \
+       static int VOFFNAME(name)[] = {                                 \
+               __offsetof(VARGSSTRUCT(name), a_vp),                    \
+               VDESC_NO_OFFSET };                                      \
+       VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
+               VDESC_NO_OFFSET,                                        \
+               __offsetof(VARGSSTRUCT(name), a_cred),                  \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET)
+
+#define VNODEOP_DESC_INIT_DVP_VPP_CNP(name)                            \
+       static int VOFFNAME(name)[] = {                                 \
+               __offsetof(VARGSSTRUCT(name), a_dvp),                   \
+               VDESC_NO_OFFSET };                                      \
+       VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
+               __offsetof(VARGSSTRUCT(name), a_vpp),                   \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               __offsetof(VARGSSTRUCT(name), a_cnp))
+
+#define VNODEOP_DESC_INIT_DVP_CNP(name)                                        \
+       static int VOFFNAME(name)[] = {                                 \
+               __offsetof(VARGSSTRUCT(name), a_dvp),                   \
+               VDESC_NO_OFFSET };                                      \
+       VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               __offsetof(VARGSSTRUCT(name), a_cnp))
+
+#define VNODEOP_DESC_INIT_DVP_VP_CNP(name)                             \
+       static int VOFFNAME(name)[] = {                                 \
+               __offsetof(VARGSSTRUCT(name), a_dvp),                   \
+               __offsetof(VARGSSTRUCT(name), a_vp),                    \
+               VDESC_NO_OFFSET };                                      \
+       VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               __offsetof(VARGSSTRUCT(name), a_cnp))
+
+#define VNODEOP_DESC_INIT_TDVP_VP_CNP(name)                            \
+       static int VOFFNAME(name)[] = {                                 \
+               __offsetof(VARGSSTRUCT(name), a_tdvp),                  \
+               __offsetof(VARGSSTRUCT(name), a_vp),                    \
+               VDESC_NO_OFFSET };                                      \
+       VNODEOP_DESC_INIT(name, 0, VOFFNAME(name),                      \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               VDESC_NO_OFFSET,                                        \
+               __offsetof(VARGSSTRUCT(name), a_cnp))
+
+VNODEOP_DESC_INIT_SIMPLE(default);
+VNODEOP_DESC_INIT_VP(islocked);
+VNODEOP_DESC_INIT_DVP_VPP_CNP(lookup);
+VNODEOP_DESC_INIT_DVP_VPP_CNP(cachedlookup);
+VNODEOP_DESC_INIT_DVP_VPP_CNP(create);
+VNODEOP_DESC_INIT_DVP_CNP(whiteout);
+VNODEOP_DESC_INIT_DVP_VPP_CNP(mknod);
+VNODEOP_DESC_INIT_VP_CRED(open);
+VNODEOP_DESC_INIT_VP(close);
+VNODEOP_DESC_INIT_VP_CRED(access);
+VNODEOP_DESC_INIT_VP(getattr);
+VNODEOP_DESC_INIT_VP_CRED(setattr);
+VNODEOP_DESC_INIT_VP_CRED(read);
+VNODEOP_DESC_INIT_VP_CRED(write);
+VNODEOP_DESC_INIT_VP_CRED(lease);
+VNODEOP_DESC_INIT_VP_CRED(ioctl);
+VNODEOP_DESC_INIT_VP_CRED(poll);
+VNODEOP_DESC_INIT_VP(kqfilter);
+VNODEOP_DESC_INIT_VP(revoke);
+VNODEOP_DESC_INIT_VP_CRED(mmap);
+VNODEOP_DESC_INIT_VP(fsync);
+VNODEOP_DESC_INIT_DVP_VP_CNP(remove);
+VNODEOP_DESC_INIT_TDVP_VP_CNP(link);
+
+static int VOFFNAME(rename)[] = { 
+       __offsetof(VARGSSTRUCT(rename), a_fdvp),
+       __offsetof(VARGSSTRUCT(rename), a_fvp),
+       __offsetof(VARGSSTRUCT(rename), a_tdvp),
+       __offsetof(VARGSSTRUCT(rename), a_tvp),
+       VDESC_NO_OFFSET
+};
+VNODEOP_DESC_INIT(rename, 
+       VDESC_VP0_WILLRELE|VDESC_VP1_WILLRELE|
+        VDESC_VP2_WILLRELE|VDESC_VP3_WILLRELE,
+       VOFFNAME(rename),
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       VDESC_NO_OFFSET,
+       __offsetof(VARGSSTRUCT(rename), a_fcnp));
+VNODEOP_DESC_INIT_DVP_VPP_CNP(mkdir);
+VNODEOP_DESC_INIT_DVP_VP_CNP(rmdir);
+VNODEOP_DESC_INIT_DVP_VPP_CNP(symlink);
+VNODEOP_DESC_INIT_VP_CRED(readdir);
+VNODEOP_DESC_INIT_VP_CRED(readlink);
+VNODEOP_DESC_INIT_VP(inactive);
+VNODEOP_DESC_INIT_VP(reclaim);
+VNODEOP_DESC_INIT_VP(lock);
+VNODEOP_DESC_INIT_VP(unlock);
+VNODEOP_DESC_INIT_VP_VPP(bmap);
+VNODEOP_DESC_INIT_VP(strategy);
+VNODEOP_DESC_INIT_VP(print);
+VNODEOP_DESC_INIT_VP(pathconf);
+VNODEOP_DESC_INIT_VP(advlock);
+VNODEOP_DESC_INIT_VP_CRED(balloc);
+VNODEOP_DESC_INIT_VP(reallocblks);
+VNODEOP_DESC_INIT_VP(getpages);
+VNODEOP_DESC_INIT_VP(putpages);
+VNODEOP_DESC_INIT_VP(freeblks);
+VNODEOP_DESC_INIT_VP(bwrite);
+VNODEOP_DESC_INIT_VP_CRED(getacl);
+VNODEOP_DESC_INIT_VP_CRED(setacl);
+VNODEOP_DESC_INIT_VP_CRED(aclcheck);
+VNODEOP_DESC_INIT_VP_CRED(getextattr);
+VNODEOP_DESC_INIT_VP_CRED(setextattr);
+VNODEOP_DESC_INIT_VP(createvobject);
+VNODEOP_DESC_INIT_VP(destroyvobject);
+VNODEOP_DESC_INIT_VP(getvobject);
+
+int
+vop_islocked(struct vnode *vp, struct thread *td)
+{
+       struct vop_islocked_args ap;
+
+       ap.a_head.a_desc = &vop_islocked_desc;
+       ap.a_vp = vp;
+       ap.a_td = td;
+       return(vp->v_vops->vop_islocked(&ap));
+}
+
+int
+vop_lookup(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct namecache **ncpp,
+               struct componentname *cnp)
+{
+       struct vop_lookup_args ap;
+
+       ap.a_head.a_desc = &vop_lookup_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_vpp = vpp;
+       ap.a_ncpp = ncpp;
+       ap.a_cnp = cnp;
+       return(dvp->v_vops->vop_lookup(&ap));
+}
+
+int
+vop_cachedlookup(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct namecache **ncpp,
+               struct componentname *cnp)
+{
+       struct vop_cachedlookup_args ap;
+
+       ap.a_head.a_desc = &vop_cachedlookup_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_vpp = vpp;
+       ap.a_ncpp = ncpp;
+       ap.a_cnp = cnp;
+       return(dvp->v_vops->vop_cachedlookup(&ap));
+}
+
+int
+vop_create(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap)
+{
+       struct vop_create_args ap;
+
+       ap.a_head.a_desc = &vop_create_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_vpp = vpp;
+       ap.a_cnp = cnp;
+       ap.a_vap = vap;
+       return(dvp->v_vops->vop_create(&ap));
+}
+
+int
+vop_whiteout(struct vnode *dvp, struct namecache *par,
+               struct componentname *cnp, int flags)
+{
+       struct vop_whiteout_args ap;
+
+       ap.a_head.a_desc = &vop_whiteout_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_cnp = cnp;
+       ap.a_flags = flags;
+       return(dvp->v_vops->vop_whiteout(&ap));
+}
+
+int
+vop_mknod(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap)
+{
+       struct vop_mknod_args ap;
+
+       ap.a_head.a_desc = &vop_mknod_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_vpp = vpp;
+       ap.a_cnp = cnp;
+       ap.a_vap = vap;
+       return(dvp->v_vops->vop_mknod(&ap));
+}
+
+int
+vop_open(struct vnode *vp, int mode, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_open_args ap;
+
+       ap.a_head.a_desc = &vop_open_desc;
+       ap.a_vp = vp;
+       ap.a_mode = mode;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_open(&ap));
+}
+
+int
+vop_close(struct vnode *vp, int fflag, struct thread *td)
+{
+       struct vop_close_args ap;
+
+       ap.a_head.a_desc = &vop_close_desc;
+       ap.a_vp = vp;
+       ap.a_fflag = fflag;
+       ap.a_td = td;
+       return(vp->v_vops->vop_close(&ap));
+}
+
+int
+vop_access(struct vnode *vp, int mode, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_access_args ap;
+
+       ap.a_head.a_desc = &vop_access_desc;
+       ap.a_vp = vp;
+       ap.a_mode = mode;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_access(&ap));
+}
+
+int
+vop_getattr(struct vnode *vp, struct vattr *vap,
+               struct thread *td)
+{
+       struct vop_getattr_args ap;
+
+       ap.a_head.a_desc = &vop_getattr_desc;
+       ap.a_vp = vp;
+       ap.a_vap = vap;
+       ap.a_td = td;
+       return(vp->v_vops->vop_getattr(&ap));
+}
+
+int
+vop_setattr(struct vnode *vp, struct vattr *vap,
+               struct ucred *cred, struct thread *td)
+{
+       struct vop_setattr_args ap;
+
+       ap.a_head.a_desc = &vop_setattr_desc;
+       ap.a_vp = vp;
+       ap.a_vap = vap;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_setattr(&ap));
+}
+
+int
+vop_read(struct vnode *vp, struct uio *uio, int ioflag,
+               struct ucred *cred)
+{
+       struct vop_read_args ap;
+
+       ap.a_head.a_desc = &vop_read_desc;
+       ap.a_vp = vp;
+       ap.a_uio = uio;
+       ap.a_ioflag = ioflag;
+       ap.a_cred = cred;
+       return(vp->v_vops->vop_read(&ap));
+}
+
+int
+vop_write(struct vnode *vp, struct uio *uio, int ioflag,
+               struct ucred *cred)
+{
+       struct vop_write_args ap;
+
+       ap.a_head.a_desc = &vop_write_desc;
+       ap.a_vp = vp;
+       ap.a_uio = uio;
+       ap.a_ioflag = ioflag;
+       ap.a_cred = cred;
+       return(vp->v_vops->vop_write(&ap));
+}
+
+int
+vop_lease(struct vnode *vp, struct thread *td,
+               struct ucred *cred, int flag)
+{
+       struct vop_lease_args ap;
+
+       ap.a_head.a_desc = &vop_lease_desc;
+       ap.a_vp = vp;
+       ap.a_td = td;
+       ap.a_cred = cred;
+       ap.a_flag = flag;
+       return(vp->v_vops->vop_lease(&ap));
+}
+
+int
+vop_ioctl(struct vnode *vp, u_long command, caddr_t data,
+               int fflag, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_ioctl_args ap;
+
+       ap.a_head.a_desc = &vop_ioctl_desc;
+       ap.a_vp = vp;
+       ap.a_command = command;
+       ap.a_data = data;
+       ap.a_fflag = fflag;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_ioctl(&ap));
+}
+
+int
+vop_poll(struct vnode *vp, int events, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_poll_args ap;
+
+       ap.a_head.a_desc = &vop_poll_desc;
+       ap.a_vp = vp;
+       ap.a_events = events;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_poll(&ap));
+}
+
+int
+vop_kqfilter(struct vnode *vp, struct knote *kn)
+{
+       struct vop_kqfilter_args ap;
+
+       ap.a_head.a_desc = &vop_kqfilter_desc;
+       ap.a_vp = vp;
+       ap.a_kn = kn;
+       return(vp->v_vops->vop_kqfilter(&ap));
+}
+
+int
+vop_revoke(struct vnode *vp, int flags)
+{
+       struct vop_revoke_args ap;
+
+       ap.a_head.a_desc = &vop_revoke_desc;
+       ap.a_vp = vp;
+       ap.a_flags = flags;
+       return(vp->v_vops->vop_revoke(&ap));
+}
+
+int
+vop_mmap(struct vnode *vp, int fflags, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_mmap_args ap;
+
+       ap.a_head.a_desc = &vop_mmap_desc;
+       ap.a_vp = vp;
+       ap.a_fflags = fflags;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_mmap(&ap));
+}
+
+int
+vop_fsync(struct vnode *vp, int waitfor, struct thread *td)
+{
+       struct vop_fsync_args ap;
+
+       ap.a_head.a_desc = &vop_fsync_desc;
+       ap.a_vp = vp;
+       ap.a_waitfor = waitfor;
+       ap.a_td = td;
+       return(vp->v_vops->vop_fsync(&ap));
+}
+
+int
+vop_remove(struct vnode *dvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp)
+{
+       struct vop_remove_args ap;
+
+       ap.a_head.a_desc = &vop_remove_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_vp = vp;
+       ap.a_cnp = cnp;
+       return(dvp->v_vops->vop_remove(&ap));
+}
+
+int
+vop_link(struct vnode *tdvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp)
+{
+       struct vop_link_args ap;
+
+       ap.a_head.a_desc = &vop_link_desc;
+       ap.a_tdvp = tdvp;
+       ap.a_par = par;
+       ap.a_vp = vp;
+       ap.a_cnp = cnp;
+       return(tdvp->v_vops->vop_link(&ap));
+}
+
+int
+vop_rename(struct vnode *fdvp, struct namecache *fpar,
+               struct vnode *fvp, struct componentname *fcnp,
+               struct vnode *tdvp, struct namecache *tpar,
+               struct vnode *tvp, struct componentname *tcnp)
+{
+       struct vop_rename_args ap;
+
+       ap.a_head.a_desc = &vop_rename_desc;
+       ap.a_fdvp = fdvp;
+       ap.a_fpar = fpar;
+       ap.a_fvp = fvp;
+       ap.a_fcnp = fcnp;
+       ap.a_tdvp = tdvp;
+       ap.a_tpar = tpar;
+       ap.a_tvp = tvp;
+       ap.a_tcnp = tcnp;
+       return(fdvp->v_vops->vop_rename(&ap));
+}
+
+int
+vop_mkdir(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap)
+{
+       struct vop_mkdir_args ap;
+
+       ap.a_head.a_desc = &vop_mkdir_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_vpp = vpp;
+       ap.a_cnp = cnp;
+       ap.a_vap = vap;
+       return(dvp->v_vops->vop_mkdir(&ap));
+}
+
+int
+vop_rmdir(struct vnode *dvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp)
+{
+       struct vop_rmdir_args ap;
+
+       ap.a_head.a_desc = &vop_rmdir_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_vp = vp;
+       ap.a_cnp = cnp;
+       return(dvp->v_vops->vop_rmdir(&ap));
+}
+
+int
+vop_symlink(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap, char *target)
+{
+       struct vop_symlink_args ap;
+
+       ap.a_head.a_desc = &vop_symlink_desc;
+       ap.a_dvp = dvp;
+       ap.a_par = par;
+       ap.a_vpp = vpp;
+       ap.a_cnp = cnp;
+       ap.a_vap = vap;
+       ap.a_target = target;
+       return(dvp->v_vops->vop_symlink(&ap));
+}
+
+int
+vop_readdir(struct vnode *vp, struct uio *uio,
+               struct ucred *cred, int *eofflag, 
+               int *ncookies, u_long **cookies)
+{
+       struct vop_readdir_args ap;
+
+       ap.a_head.a_desc = &vop_readdir_desc;
+       ap.a_vp = vp;
+       ap.a_uio = uio;
+       ap.a_cred = cred;
+       ap.a_eofflag = eofflag;
+       ap.a_ncookies = ncookies;
+       ap.a_cookies = cookies;
+       return(vp->v_vops->vop_readdir(&ap));
+}
+
+int
+vop_readlink(struct vnode *vp, struct uio *uio,
+               struct ucred *cred)
+{
+       struct vop_readlink_args ap;
+
+       ap.a_head.a_desc = &vop_readlink_desc;
+       ap.a_vp = vp;
+       ap.a_uio = uio;
+       ap.a_cred = cred;
+       return(vp->v_vops->vop_readlink(&ap));
+}
+
+int
+vop_inactive(struct vnode *vp, struct thread *td)
+{
+       struct vop_inactive_args ap;
+
+       ap.a_head.a_desc = &vop_inactive_desc;
+       ap.a_vp = vp;
+       ap.a_td = td;
+       return(vp->v_vops->vop_inactive(&ap));
+}
+
+int
+vop_reclaim(struct vnode *vp, struct thread *td)
+{
+       struct vop_reclaim_args ap;
+
+       ap.a_head.a_desc = &vop_reclaim_desc;
+       ap.a_vp = vp;
+       ap.a_td = td;
+       return(vp->v_vops->vop_reclaim(&ap));
+}
+
+int
+vop_lock(struct vnode *vp, struct lwkt_tokref *vlock,
+               int flags, struct thread *td)
+{
+       struct vop_lock_args ap;
+
+       ap.a_head.a_desc = &vop_lock_desc;
+       ap.a_vp = vp;
+       ap.a_vlock = vlock;
+       ap.a_flags = flags;
+       ap.a_td = td;
+       return(vp->v_vops->vop_lock(&ap));
+}
+
+int
+vop_unlock(struct vnode *vp, struct lwkt_tokref *vlock,
+               int flags, struct thread *td)
+{
+       struct vop_unlock_args ap;
+
+       ap.a_head.a_desc = &vop_unlock_desc;
+       ap.a_vp = vp;
+       ap.a_vlock = vlock;
+       ap.a_flags = flags;
+       ap.a_td = td;
+       return(vp->v_vops->vop_unlock(&ap));
+}
+
+int
+vop_bmap(struct vnode *vp, daddr_t bn, struct vnode **vpp,
+               daddr_t *bnp, int *runp, int *runb)
+{
+       struct vop_bmap_args ap;
+
+       ap.a_head.a_desc = &vop_bmap_desc;
+       ap.a_vp = vp;
+       ap.a_bn = bn;
+       ap.a_vpp = vpp;
+       ap.a_bnp = bnp;
+       ap.a_runp = runp;
+       ap.a_runb = runb;
+       return(vp->v_vops->vop_bmap(&ap));
+}
+
+int
+vop_strategy(struct vnode *vp, struct buf *bp)
+{
+       struct vop_strategy_args ap;
+
+       ap.a_head.a_desc = &vop_strategy_desc;
+       ap.a_vp = vp;
+       ap.a_bp = bp;
+       return(vp->v_vops->vop_strategy(&ap));
+}
+
+int
+vop_print(struct vnode *vp)
+{
+       struct vop_print_args ap;
+
+       ap.a_head.a_desc = &vop_print_desc;
+       ap.a_vp = vp;
+       return(vp->v_vops->vop_print(&ap));
+}
+
+int
+vop_pathconf(struct vnode *vp, int name,
+               register_t *retval)
+{
+       struct vop_pathconf_args ap;
+
+       ap.a_head.a_desc = &vop_pathconf_desc;
+       ap.a_vp = vp;
+       ap.a_name = name;
+       ap.a_retval = retval;
+       return(vp->v_vops->vop_pathconf(&ap));
+}
+
+int
+vop_advlock(struct vnode *vp, caddr_t id, int op,
+               struct flock *fl, int flags)
+{
+       struct vop_advlock_args ap;
+
+       ap.a_head.a_desc = &vop_advlock_desc;
+       ap.a_vp = vp;
+       ap.a_id = id;
+       ap.a_op = op;
+       ap.a_fl = fl;
+       ap.a_flags = flags;
+       return(vp->v_vops->vop_advlock(&ap));
+}
+
+int
+vop_balloc(struct vnode *vp, off_t startoffset,
+               int size, struct ucred *cred, int flags,
+               struct buf **bpp)
+{
+       struct vop_balloc_args ap;
+
+       ap.a_head.a_desc = &vop_balloc_desc;
+       ap.a_vp = vp;
+       ap.a_startoffset = startoffset;
+       ap.a_size = size;
+       ap.a_cred = cred;
+       ap.a_flags = flags;
+       ap.a_bpp = bpp;
+       return(vp->v_vops->vop_balloc(&ap));
+}
+
+int
+vop_reallocblks(struct vnode *vp,
+               struct cluster_save *buflist)
+{
+       struct vop_reallocblks_args ap;
+
+       ap.a_head.a_desc = &vop_reallocblks_desc;
+       ap.a_vp = vp;
+       ap.a_buflist = buflist;
+       return(vp->v_vops->vop_reallocblks(&ap));
+}
+
+int
+vop_getpages(struct vnode *vp, vm_page_t *m, int count,
+               int reqpage, vm_ooffset_t offset)
+{
+       struct vop_getpages_args ap;
+
+       ap.a_head.a_desc = &vop_getpages_desc;
+       ap.a_vp = vp;
+       ap.a_m = m;
+       ap.a_count = count;
+       ap.a_reqpage = reqpage;
+       ap.a_offset = offset;
+       return(vp->v_vops->vop_getpages(&ap));
+}
+
+int
+vop_putpages(struct vnode *vp, vm_page_t *m, int count,
+               int sync, int *rtvals,
+               vm_ooffset_t offset)
+{
+       struct vop_putpages_args ap;
+
+       ap.a_head.a_desc = &vop_putpages_desc;
+       ap.a_vp = vp;
+       ap.a_m = m;
+       ap.a_count = count;
+       ap.a_sync = sync;
+       ap.a_rtvals = rtvals;
+       ap.a_offset = offset;
+       return(vp->v_vops->vop_putpages(&ap));
+}
+
+int
+vop_freeblks(struct vnode *vp, daddr_t addr,
+               daddr_t length)
+{
+       struct vop_freeblks_args ap;
+
+       ap.a_head.a_desc = &vop_freeblks_desc;
+       ap.a_vp = vp;
+       ap.a_addr = addr;
+       ap.a_length = length;
+       return(vp->v_vops->vop_freeblks(&ap));
+}
+
+int
+vop_bwrite(struct vnode *vp, struct buf *bp)
+{
+       struct vop_bwrite_args ap;
+
+       ap.a_head.a_desc = &vop_bwrite_desc;
+       ap.a_vp = vp;
+       ap.a_bp = bp;
+       return(vp->v_vops->vop_bwrite(&ap));
+}
+
+int
+vop_getacl(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_getacl_args ap;
+
+       ap.a_head.a_desc = &vop_getacl_desc;
+       ap.a_vp = vp;
+       ap.a_type = type;
+       ap.a_aclp = aclp;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_getacl(&ap));
+}
+
+int
+vop_setacl(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_setacl_args ap;
+
+       ap.a_head.a_desc = &vop_setacl_desc;
+       ap.a_vp = vp;
+       ap.a_type = type;
+       ap.a_aclp = aclp;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_setacl(&ap));
+}
+
+int
+vop_aclcheck(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_aclcheck_args ap;
+
+       ap.a_head.a_desc = &vop_aclcheck_desc;
+       ap.a_vp = vp;
+       ap.a_type = type;
+       ap.a_aclp = aclp;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_aclcheck(&ap));
+}
+
+int
+vop_getextattr(struct vnode *vp, char *name, 
+               struct uio *uio, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_getextattr_args ap;
+
+       ap.a_head.a_desc = &vop_getextattr_desc;
+       ap.a_vp = vp;
+       ap.a_name = name;
+       ap.a_uio = uio;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_getextattr(&ap));
+}
+
+int
+vop_setextattr(struct vnode *vp, char *name, 
+               struct uio *uio, struct ucred *cred,
+               struct thread *td)
+{
+       struct vop_setextattr_args ap;
+
+       ap.a_head.a_desc = &vop_setextattr_desc;
+       ap.a_vp = vp;
+       ap.a_name = name;
+       ap.a_uio = uio;
+       ap.a_cred = cred;
+       ap.a_td = td;
+       return(vp->v_vops->vop_setextattr(&ap));
+}
+
+int
+vop_createvobject(struct vnode *vp, struct thread *td)
+{
+       struct vop_createvobject_args ap;
+
+       ap.a_head.a_desc = &vop_createvobject_desc;
+       ap.a_vp = vp;
+       ap.a_td = td;
+       return(vp->v_vops->vop_createvobject(&ap));
+}
+
+int
+vop_destroyvobject(struct vnode *vp)
+{
+       struct vop_destroyvobject_args ap;
+
+       ap.a_head.a_desc = &vop_destroyvobject_desc;
+       ap.a_vp = vp;
+       return(vp->v_vops->vop_destroyvobject(&ap));
+}
+
+int
+vop_getvobject(struct vnode *vp, struct vm_object **objpp)
+{
+       struct vop_getvobject_args ap;
+
+       ap.a_head.a_desc = &vop_getvobject_desc;
+       ap.a_vp = vp;
+       ap.a_objpp = objpp;
+       return(vp->v_vops->vop_getvobject(&ap));
+}
+
diff --git a/sys/kern/vnode_if.src b/sys/kern/vnode_if.src
deleted file mode 100644 (file)
index fd3af3f..0000000
+++ /dev/null
@@ -1,586 +0,0 @@
-#
-# Copyright (c) 1992, 1993
-#      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. All advertising materials mentioning features or use of this software
-#    must display the following acknowledgement:
-#      This product includes software developed by the University of
-#      California, Berkeley and its contributors.
-# 4. 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.
-#
-#      @(#)vnode_if.src        8.12 (Berkeley) 5/14/95
-# $FreeBSD: src/sys/kern/vnode_if.src,v 1.29.2.3 2001/05/18 09:58:45 bp Exp $
-# $DragonFly: src/sys/kern/Attic/vnode_if.src,v 1.6 2004/03/01 06:33:17 dillon Exp $
-#
-
-#
-# Above each of the vop descriptors is a specification of the locking
-# protocol used by each vop call.  The first column is the name of
-# the variable, the remaining three columns are in, out and error
-# respectively.  The "in" column defines the lock state on input,
-# the "out" column defines the state on succesful return, and the
-# "error" column defines the locking state on error exit.
-#
-# The locking value can take the following values:
-# L: locked; not converted to type of lock.
-# A: any lock type.
-# S: locked with shared lock.
-# E: locked with exclusive lock for this process.
-# O: locked with exclusive lock for other process.
-# U: unlocked.
-# -: not applicable.  vnode does not yet (or no longer) exists.
-# =: the same on input and output, may be either L or U.
-# X: locked if not nil.
-#
-
-#
-#% islocked    vp      = = =
-#
-vop_islocked {
-       IN struct vnode *vp;
-       IN struct thread *td;
-};
-
-#
-#% lookup      dvp     L ? ?
-#% lookup      vpp     - L -
-#
-# XXX - the lookup locking protocol defies simple description and depends
-#      on the flags and operation fields in the (cnp) structure.  Note
-#      especially that *vpp may equal dvp and both may be locked.
-#
-vop_lookup {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       INOUT struct vnode **vpp;
-       INOUT struct namecache **ncpp;
-       IN struct componentname *cnp;
-};
-
-#
-#% cachedlookup        dvp     L ? ?
-#% cachedlookup        vpp     - L -
-#
-# This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
-#
-vop_cachedlookup {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       INOUT struct vnode **vpp;
-       INOUT struct namecache **ncpp;
-       IN struct componentname *cnp;
-};
-
-#
-#% create      dvp     L L L
-#% create      vpp     - L -
-#
-vop_create {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       OUT struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-};
-
-#
-#% whiteout    dvp     L L L
-#
-vop_whiteout {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       IN struct componentname *cnp;
-       IN int flags;
-};
-
-#
-#% mknod       dvp     L L L
-#% mknod       vpp     - X -
-#
-vop_mknod {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       OUT struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-};
-
-#
-#% open                vp      L L L
-#
-vop_open {
-       IN struct vnode *vp;
-       IN int mode;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% close       vp      U U U
-#
-vop_close {
-       IN struct vnode *vp;
-       IN int fflag;
-       IN struct thread *td;
-};
-
-#
-#% access      vp      L L L
-#
-vop_access {
-       IN struct vnode *vp;
-       IN int mode;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% getattr     vp      = = =
-#
-vop_getattr {
-       IN struct vnode *vp;
-       OUT struct vattr *vap;
-       IN struct thread *td;
-};
-
-#
-#% setattr     vp      L L L
-#
-vop_setattr {
-       IN struct vnode *vp;
-       IN struct vattr *vap;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% read                vp      L L L
-#
-vop_read {
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN int ioflag;
-       IN struct ucred *cred;
-};
-
-#
-#% write       vp      L L L
-#
-vop_write {
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN int ioflag;
-       IN struct ucred *cred;
-};
-
-#
-#% lease       vp      = = =
-#
-vop_lease {
-       IN struct vnode *vp;
-       IN struct thread *td;
-       IN struct ucred *cred;
-       IN int flag;
-};
-
-#
-#% ioctl       vp      U U U
-#
-vop_ioctl {
-       IN struct vnode *vp;
-       IN u_long command;
-       IN caddr_t data;
-       IN int fflag;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% poll        vp      U U U
-#
-vop_poll {
-       IN struct vnode *vp;
-       IN int events;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% kqfilter    vp      U U U
-#
-vop_kqfilter {
-       IN struct vnode *vp;
-       IN struct knote *kn;
-};
-
-#
-#% revoke      vp      U U U
-#
-vop_revoke {
-       IN struct vnode *vp;
-       IN int flags;
-};
-
-#
-# XXX - not used
-#
-vop_mmap {
-       IN struct vnode *vp;
-       IN int fflags;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% fsync       vp      L L L
-#
-vop_fsync {
-       IN struct vnode *vp;
-       IN int waitfor;
-       IN struct thread *td;
-};
-
-#
-#% remove      dvp     L L L
-#% remove      vp      L L L
-#
-vop_remove {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       IN struct vnode *vp;
-       IN struct componentname *cnp;
-};
-
-#
-#% link                tdvp    L L L
-#% link                vp      U U U
-#
-vop_link {
-       IN struct vnode *tdvp;
-       IN struct namecache *par;
-       IN struct vnode *vp;
-       IN struct componentname *cnp;
-};
-
-#
-#% rename      fdvp    U U U
-#% rename      fvp     U U U
-#% rename      tdvp    L U U
-#% rename      tvp     X U U
-#
-vop_rename {
-       IN WILLRELE struct vnode *fdvp;
-       IN struct namecache *fpar;
-       IN WILLRELE struct vnode *fvp;
-       IN struct componentname *fcnp;
-       IN WILLRELE struct vnode *tdvp;
-       IN struct namecache *tpar;
-       IN WILLRELE struct vnode *tvp;
-       IN struct componentname *tcnp;
-};
-
-#
-#% mkdir       dvp     L L L
-#% mkdir       vpp     - L -
-#
-vop_mkdir {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       OUT struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-};
-
-#
-#% rmdir       dvp     L L L
-#% rmdir       vp      L L L
-#
-vop_rmdir {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       IN struct vnode *vp;
-       IN struct componentname *cnp;
-};
-
-#
-#% symlink     dvp     L L L
-#% symlink     vpp     - U -
-#
-vop_symlink {
-       IN struct vnode *dvp;
-       IN struct namecache *par;
-       OUT struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-       IN char *target;
-};
-
-#
-#% readdir     vp      L L L
-#
-vop_readdir {
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-       INOUT int *eofflag;
-       OUT int *ncookies;
-       INOUT u_long **cookies;
-};
-
-#
-#% readlink    vp      L L L
-#
-vop_readlink {
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-};
-
-#
-#% inactive    vp      L U U
-#
-vop_inactive {
-       IN struct vnode *vp;
-       IN struct thread *td;
-};
-
-#
-#% reclaim     vp      U U U
-#
-vop_reclaim {
-       IN struct vnode *vp;
-       IN struct thread *td;
-};
-
-#
-#% lock                vp      ? ? ?
-#
-vop_lock {
-       IN struct vnode *vp;
-       IN struct lwkt_tokref *vlock;
-       IN int flags;
-       IN struct thread *td;
-};
-
-#
-#% unlock      vp      L U L
-#
-vop_unlock {
-       IN struct vnode *vp;
-       IN struct lwkt_tokref *vlock;
-       IN int flags;
-       IN struct thread *td;
-};
-
-#
-#% bmap                vp      L L L
-#% bmap                vpp     - U -
-#
-vop_bmap {
-       IN struct vnode *vp;
-       IN daddr_t bn;
-       OUT struct vnode **vpp;
-       IN daddr_t *bnp;
-       OUT int *runp;
-       OUT int *runb;
-};
-
-#
-#% strategy    vp      L L L
-#
-vop_strategy {
-       IN struct vnode *vp;
-       IN struct buf *bp;
-};
-
-#
-#% print       vp      = = =
-#
-vop_print {
-       IN struct vnode *vp;
-};
-
-#
-#% pathconf    vp      L L L
-#
-vop_pathconf {
-       IN struct vnode *vp;
-       IN int name;
-       OUT register_t *retval;
-};
-
-#
-#% advlock     vp      U U U
-#
-vop_advlock {
-       IN struct vnode *vp;
-       IN caddr_t id;
-       IN int op;
-       IN struct flock *fl;
-       IN int flags;
-};
-
-#
-#% balloc      vp      L L L
-#
-vop_balloc {
-       IN struct vnode *vp;
-       IN off_t startoffset;
-       IN int size;
-       IN struct ucred *cred;
-       IN int flags;
-       OUT struct buf **bpp;
-};
-
-#
-#% reallocblks vp      L L L
-#
-vop_reallocblks {
-       IN struct vnode *vp;
-       IN struct cluster_save *buflist;
-};
-
-#
-#% getpages    vp      L L L
-#
-vop_getpages {
-       IN struct vnode *vp;
-       IN vm_page_t *m;
-       IN int count;
-       IN int reqpage;
-       IN vm_ooffset_t offset;
-};
-
-#
-#% putpages    vp      L L L
-#
-vop_putpages {
-       IN struct vnode *vp;
-       IN vm_page_t *m;
-       IN int count;
-       IN int sync;
-       IN int *rtvals;
-       IN vm_ooffset_t offset;
-};
-
-#
-#% freeblks    vp      - - -
-#
-# This call is used by the filesystem to release blocks back to 
-# device-driver.  This is useful if the driver has a lengthy 
-# erase handling or similar.
-#
-
-vop_freeblks {
-       IN struct vnode *vp;
-       IN daddr_t addr;
-       IN daddr_t length;
-};
-
-#
-#% bwrite      vp      L L L
-#
-vop_bwrite {
-       IN struct vnode *vp;
-       IN struct buf *bp;
-};
-
-#
-#% getacl      vp      = = =
-#
-vop_getacl {
-       IN struct vnode *vp;
-       IN acl_type_t type;
-       OUT struct acl *aclp;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% setacl      vp      L L L
-#
-vop_setacl {
-       IN struct vnode *vp;
-       IN acl_type_t type;
-       IN struct acl *aclp;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% aclcheck    vp      = = =
-#
-vop_aclcheck {
-       IN struct vnode *vp;
-       IN acl_type_t type;
-       IN struct acl *aclp;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% getextattr  vp      L L L
-#
-vop_getextattr {
-       IN struct vnode *vp;
-       IN char *name;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% setextattr  vp      L L L
-#
-vop_setextattr {
-       IN struct vnode *vp;
-       IN char *name;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-       IN struct thread *td;
-};
-
-#
-#% createvobject       vp      L L L
-#
-vop_createvobject {
-       IN struct vnode *vp;
-       IN struct thread *td;
-};
-
-#
-#% destroyvobject      vp      L L L
-#
-vop_destroyvobject {
-       IN struct vnode *vp;
-};
-
-#
-#% getvobject  vp      L L L
-#
-vop_getvobject {
-       IN struct vnode *vp;
-       OUT struct vm_object **objpp;
-};
index aa2bb0a..c41558f 100644 (file)
@@ -1,10 +1,10 @@
 # $FreeBSD: src/sys/modules/if_ppp/Makefile,v 1.21 1999/11/28 18:52:51 bde Exp $
-# $DragonFly: src/sys/net/ppp_layer/Makefile,v 1.4 2003/09/10 21:35:42 rob Exp $
+# $DragonFly: src/sys/net/ppp_layer/Makefile,v 1.5 2004/08/13 17:51:09 dillon Exp $
 
 .PATH:  ${.CURDIR}/../ppp ${.CURDIR}/..
 KMOD=   if_ppp
 SRCS=  if_ppp.c ppp_tty.c slcompress.c \
-       use_ppp.h opt_inet.h opt_ipx.h opt_ppp.h vnode_if.h
+       use_ppp.h opt_inet.h opt_ipx.h opt_ppp.h
 NOMAN=
 
 NPPP?=         2
index 95d683a..36ab107 100644 (file)
@@ -4,13 +4,13 @@
 # kernel_dir - kernel source root directory (/usr/src/sys)
 #
 # $FreeBSD: src/sys/modules/if_tap/Makefile,v 1.1.2.2 2001/07/24 09:49:42 dd Exp $
-# $DragonFly: src/sys/net/tap/Makefile,v 1.2 2003/06/17 04:28:44 dillon Exp $
+# $DragonFly: src/sys/net/tap/Makefile,v 1.3 2004/08/13 17:51:09 dillon Exp $
 
 .PATH:         ${.CURDIR}/../../net
 KMOD=          if_tap
-SRCS=          if_tap.c opt_inet.h vnode_if.h
+SRCS=          if_tap.c opt_inet.h
 
-CLEANFILES+=   opt_inet.h vnode_if.h
+CLEANFILES+=   opt_inet.h
 
 opt_inet.h:
        echo "#define INET 1" > opt_inet.h
index 7dba610..243399f 100644 (file)
@@ -1,9 +1,9 @@
 # $FreeBSD: src/sys/modules/if_tun/Makefile,v 1.19.2.1 2001/07/24 09:49:42 dd Exp $
-# $DragonFly: src/sys/net/tun/Makefile,v 1.4 2003/09/16 09:14:40 hsu Exp $
+# $DragonFly: src/sys/net/tun/Makefile,v 1.5 2004/08/13 17:51:09 dillon Exp $
 
 .PATH:  ${.CURDIR}/../../net
 KMOD=   if_tun
-SRCS=   if_tun.c vnode_if.h opt_inet.h opt_inet6.h opt_atalk.h opt_ipx.h
+SRCS=   if_tun.c opt_inet.h opt_inet6.h opt_atalk.h opt_ipx.h
 NOMAN=
 
 NBPF?= 1
diff --git a/sys/sys/vfsops.h b/sys/sys/vfsops.h
new file mode 100644 (file)
index 0000000..e1225f8
--- /dev/null
@@ -0,0 +1,895 @@
+/*
+ * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
+ * 
+ * This code is derived from software contributed to The DragonFly Project
+ * by Matthew Dillon <dillon@backplane.com>
+ * 
+ * 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 DragonFly Project 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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.
+ *
+ * $DragonFly: src/sys/sys/vfsops.h,v 1.1 2004/08/13 17:51:10 dillon Exp $
+ */
+
+/*
+ * The vopops structure vectors all access to a filesystem.  It contains a
+ * fixed set of vectors which are 'compiled' by the vnodeopv_entry_desc
+ * array that is typically declared in "vfs/blah/blah_vnops.c".
+ *
+ * In DragonFly the ultimate goal is to thread the VFS, which means that
+ * the dispatch functions will eventually be called from the context of 
+ * a management thread rather then directly called by a process.  This
+ * requires us to divorce direct process dependancies (in particular ioctl
+ * and UIO's).  In addition, it is our intention to implement kernel
+ * level cache management and coherency in the vop_*() interfacing
+ * layer.
+ *
+ * The number of management threads will depend on the VFS.  The idea is
+ * to give a high performance VFS such as UFS at least one thread per cpu,
+ * and a low performance VFS such as CD9660 perhaps just one thread period.
+ * Blocking issues within the management thread are up to the VFS itself,
+ * but DragonFly will introduce a layer above the VFS to handle cacheable
+ * requests without having to enter the VFS (e.g. by making attribute
+ * and VM object information a permanent fixture of the vnode structure
+ * and accessing them directly).
+ *
+ * THE VOPOPS VECTORS SHOULD NEVER BE CALLED DIRECTLY!  Instead always use
+ * the kernel helper procedures vop_*() to call a vopop.  The kernel
+ * helper procedure will be responsible for handling the DragonFly messaging
+ * conversion when it occurs.
+ */
+
+#ifndef _SYS_VOPOPS_H_
+#define        _SYS_VOPOPS_H_
+
+struct vnode;
+struct thread;
+struct namecache;
+struct componentname;
+struct vattr;
+struct ucred;
+struct uio;
+struct knote;
+struct vm_object;
+struct vm_page;
+
+struct vop_generic_args {
+       struct vnodeop_desc *a_desc;
+};
+
+struct vop_islocked_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+};
+
+struct vop_lookup_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct namecache **a_ncpp;
+       struct componentname *a_cnp;
+};
+
+struct vop_cachedlookup_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct namecache **a_ncpp;
+       struct componentname *a_cnp;
+};
+
+struct vop_create_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct componentname *a_cnp;
+       struct vattr *a_vap;
+};
+
+struct vop_whiteout_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct componentname *a_cnp;
+       int a_flags;
+};
+
+struct vop_mknod_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct componentname *a_cnp;
+       struct vattr *a_vap;
+};
+
+struct vop_open_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_mode;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_close_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_fflag;
+       struct thread *a_td;
+};
+
+struct vop_access_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_mode;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_getattr_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vattr *a_vap;
+       struct thread *a_td;
+};
+
+struct vop_setattr_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vattr *a_vap;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_read_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct uio *a_uio;
+       int a_ioflag;
+       struct ucred *a_cred;
+};
+
+struct vop_write_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct uio *a_uio;
+       int a_ioflag;
+       struct ucred *a_cred;
+};
+
+struct vop_lease_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+       struct ucred *a_cred;
+       int a_flag;
+};
+
+struct vop_ioctl_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       u_long a_command;
+       caddr_t a_data;
+       int a_fflag;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_poll_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_events;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_kqfilter_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct knote *a_kn;
+};
+
+struct vop_revoke_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_flags;
+};
+
+struct vop_mmap_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_fflags;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_fsync_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_waitfor;
+       struct thread *a_td;
+};
+
+struct vop_remove_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode *a_vp;
+       struct componentname *a_cnp;
+};
+
+struct vop_link_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_tdvp;
+       struct namecache *a_par;
+       struct vnode *a_vp;
+       struct componentname *a_cnp;
+};
+
+struct vop_rename_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_fdvp;
+       struct namecache *a_fpar;
+       struct vnode *a_fvp;
+       struct componentname *a_fcnp;
+       struct vnode *a_tdvp;
+       struct namecache *a_tpar;
+       struct vnode *a_tvp;
+       struct componentname *a_tcnp;
+};
+
+struct vop_mkdir_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct componentname *a_cnp;
+       struct vattr *a_vap;
+};
+
+struct vop_rmdir_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode *a_vp;
+       struct componentname *a_cnp;
+};
+
+struct vop_symlink_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct componentname *a_cnp;
+       struct vattr *a_vap;
+       char *a_target;
+};
+
+struct vop_readdir_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct uio *a_uio;
+       struct ucred *a_cred;
+       int *a_eofflag;
+       int *a_ncookies;
+       u_long **a_cookies;
+};
+
+struct vop_readlink_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct uio *a_uio;
+       struct ucred *a_cred;
+};
+
+struct vop_inactive_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+};
+
+struct vop_reclaim_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+};
+
+struct vop_lock_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct lwkt_tokref *a_vlock;
+       int a_flags;
+       struct thread *a_td;
+};
+
+struct vop_unlock_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct lwkt_tokref *a_vlock;
+       int a_flags;
+       struct thread *a_td;
+};
+
+struct vop_bmap_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       daddr_t a_bn;
+       struct vnode **a_vpp;
+       daddr_t *a_bnp;
+       int *a_runp;
+       int *a_runb;
+};
+
+struct vop_strategy_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct buf *a_bp;
+};
+
+struct vop_print_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+};
+
+struct vop_pathconf_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_name;
+       register_t *a_retval;
+};
+
+struct vop_advlock_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       caddr_t a_id;
+       int a_op;
+       struct flock *a_fl;
+       int a_flags;
+};
+
+struct vop_balloc_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       off_t a_startoffset;
+       int a_size;
+       struct ucred *a_cred;
+       int a_flags;
+       struct buf **a_bpp;
+};
+
+struct vop_reallocblks_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct cluster_save *a_buflist;
+};
+
+struct vop_getpages_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vm_page **a_m;
+       int a_count;
+       int a_reqpage;
+       vm_ooffset_t a_offset;
+};
+
+struct vop_putpages_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vm_page **a_m;
+       int a_count;
+       int a_sync;
+       int *a_rtvals;
+       vm_ooffset_t a_offset;
+};
+
+struct vop_freeblks_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       daddr_t a_addr;
+       daddr_t a_length;
+};
+
+struct vop_bwrite_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct buf *a_bp;
+};
+
+struct vop_getacl_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       acl_type_t a_type;
+       struct acl *a_aclp;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_setacl_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       acl_type_t a_type;
+       struct acl *a_aclp;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_aclcheck_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       acl_type_t a_type;
+       struct acl *a_aclp;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_getextattr_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       char *a_name;
+       struct uio *a_uio;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_setextattr_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       char *a_name;
+       struct uio *a_uio;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_createvobject_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+};
+
+struct vop_destroyvobject_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+};
+
+struct vop_getvobject_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vm_object **a_objpp;
+};
+
+/*
+ * This structure is the post-compiled VOP operations vector and should only
+ * be used by kern/vfs_vopops.c.
+ */
+struct vop_ops {
+       int     vv_refs;
+       struct vop_ops *vv_new;
+#define vop_ops_first_field    vop_default
+       int     (*vop_default)(struct vop_generic_args *);
+       int     (*vop_islocked)(struct vop_islocked_args *);
+       int     (*vop_lookup)(struct vop_lookup_args *);
+       int     (*vop_cachedlookup)(struct vop_cachedlookup_args *);
+       int     (*vop_create)(struct vop_create_args *);
+       int     (*vop_whiteout)(struct vop_whiteout_args *);
+       int     (*vop_mknod)(struct vop_mknod_args *);
+       int     (*vop_open)(struct vop_open_args *);
+       int     (*vop_close)(struct vop_close_args *);
+       int     (*vop_access)(struct vop_access_args *);
+       int     (*vop_getattr)(struct vop_getattr_args *);
+       int     (*vop_setattr)(struct vop_setattr_args *);
+       int     (*vop_read)(struct vop_read_args *);
+       int     (*vop_write)(struct vop_write_args *);
+       int     (*vop_lease)(struct vop_lease_args *);
+       int     (*vop_ioctl)(struct vop_ioctl_args *);
+       int     (*vop_poll)(struct vop_poll_args *);
+       int     (*vop_kqfilter)(struct vop_kqfilter_args *);
+       int     (*vop_revoke)(struct vop_revoke_args *);
+       int     (*vop_mmap)(struct vop_mmap_args *);
+       int     (*vop_fsync)(struct vop_fsync_args *);
+       int     (*vop_remove)(struct vop_remove_args *);
+       int     (*vop_link)(struct vop_link_args *);
+       int     (*vop_rename)(struct vop_rename_args *);
+       int     (*vop_mkdir)(struct vop_mkdir_args *);
+       int     (*vop_rmdir)(struct vop_rmdir_args *);
+       int     (*vop_symlink)(struct vop_symlink_args *);
+       int     (*vop_readdir)(struct vop_readdir_args *);
+       int     (*vop_readlink)(struct vop_readlink_args *);
+       int     (*vop_inactive)(struct vop_inactive_args *);
+       int     (*vop_reclaim)(struct vop_reclaim_args *);
+       int     (*vop_lock)(struct vop_lock_args *);
+       int     (*vop_unlock)(struct vop_unlock_args *);
+       int     (*vop_bmap)(struct vop_bmap_args *);
+       int     (*vop_strategy)(struct vop_strategy_args *);
+       int     (*vop_print)(struct vop_print_args *);
+       int     (*vop_pathconf)(struct vop_pathconf_args *);
+       int     (*vop_advlock)(struct vop_advlock_args *);
+       int     (*vop_balloc)(struct vop_balloc_args *);
+       int     (*vop_reallocblks)(struct vop_reallocblks_args *);
+       int     (*vop_getpages)(struct vop_getpages_args *);
+       int     (*vop_putpages)(struct vop_putpages_args *);
+       int     (*vop_freeblks)(struct vop_freeblks_args *);
+       int     (*vop_bwrite)(struct vop_bwrite_args *);
+       int     (*vop_getacl)(struct vop_getacl_args *);
+       int     (*vop_setacl)(struct vop_setacl_args *);
+       int     (*vop_aclcheck)(struct vop_aclcheck_args *);
+       int     (*vop_getextattr)(struct vop_getextattr_args *);
+       int     (*vop_setextattr)(struct vop_setextattr_args *);
+       int     (*vop_createvobject)(struct vop_createvobject_args *);
+       int     (*vop_destroyvobject)(struct vop_destroyvobject_args *);
+       int     (*vop_getvobject)(struct vop_getvobject_args *);
+#define vop_ops_last_field     vop_getvobject
+};
+
+/*
+ * Kernel VOP arguments union, suitable for malloc / embedding in other
+ * structures.  The vop_args_union can hold any VOP call argument structure.
+ * Note that vu_head is broken out.
+ */
+union vop_args_union {
+       struct vop_generic_args vu_head;
+       struct vop_generic_args vu_default;
+       struct vop_islocked_args vu_islocked;
+       struct vop_lookup_args vu_lookup;
+       struct vop_cachedlookup_args vu_cachedlookup;
+       struct vop_create_args vu_create;
+       struct vop_whiteout_args vu_whiteout;
+       struct vop_mknod_args vu_mknod;
+       struct vop_open_args vu_open;
+       struct vop_close_args vu_close;
+       struct vop_access_args vu_access;
+       struct vop_getattr_args vu_getattr;
+       struct vop_setattr_args vu_setattr;
+       struct vop_read_args vu_read;
+       struct vop_write_args vu_write;
+       struct vop_lease_args vu_lease;
+       struct vop_ioctl_args vu_ioctl;
+       struct vop_poll_args vu_poll;
+       struct vop_kqfilter_args vu_kqfilter;
+       struct vop_revoke_args vu_revoke;
+       struct vop_mmap_args vu_mmap;
+       struct vop_fsync_args vu_fsync;
+       struct vop_remove_args vu_remove;
+       struct vop_link_args vu_link;
+       struct vop_rename_args vu_rename;
+       struct vop_mkdir_args vu_mkdir;
+       struct vop_rmdir_args vu_rmdir;
+       struct vop_symlink_args vu_symlink;
+       struct vop_readdir_args vu_readdir;
+       struct vop_readlink_args vu_readlink;
+       struct vop_inactive_args vu_inactive;
+       struct vop_reclaim_args vu_reclaim;
+       struct vop_lock_args vu_lock;
+       struct vop_unlock_args vu_unlock;
+       struct vop_bmap_args vu_bmap;
+       struct vop_strategy_args vu_strategy;
+       struct vop_print_args vu_print;
+       struct vop_pathconf_args vu_pathconf;
+       struct vop_advlock_args vu_advlock;
+       struct vop_balloc_args vu_balloc;
+       struct vop_reallocblks_args vu_reallocblks;
+       struct vop_getpages_args vu_getpages;
+       struct vop_putpages_args vu_putpages;
+       struct vop_freeblks_args vu_freeblks;
+       struct vop_bwrite_args vu_bwrite;
+       struct vop_getacl_args vu_getacl;
+       struct vop_setacl_args vu_setacl;
+       struct vop_aclcheck_args vu_aclcheck;
+       struct vop_getextattr_args vu_getextattr;
+       struct vop_setextattr_args vu_setextattr;
+       struct vop_createvobject_args vu_createvobject;
+       struct vop_destroyvobject_args vu_destroyvobject;
+       struct vop_getvobject_args vu_getvobject;
+};
+
+#ifdef _KERNEL
+
+/*
+ * Kernel VOP call wrappers.  These wrappers are responsible for wrapping
+ * the arguments in the appropriate VOP arguments structure, sending the
+ * message, and waiting for a reply.  All kernel and VFS code should generally
+ * call these wrappers rather then attempt to call the operations vector
+ * routine directly in order to allow DragonFly to properly wrap the operation
+ * in a message and dispatch it to the correct thread.
+ */
+int vop_islocked(struct vnode *vp, struct thread *td);
+int vop_lookup(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct namecache **ncpp,
+               struct componentname *cnp);
+int vop_cachedlookup(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct namecache **ncpp,
+               struct componentname *cnp);
+int vop_create(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap);
+int vop_whiteout(struct vnode *dvp, struct namecache *par,
+               struct componentname *cnp, int flags);
+int vop_mknod(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap);
+int vop_open(struct vnode *vp, int mode, struct ucred *cred,
+               struct thread *td);
+int vop_close(struct vnode *vp, int fflag, struct thread *td);
+int vop_access(struct vnode *vp, int mode, struct ucred *cred,
+               struct thread *td);
+int vop_getattr(struct vnode *vp, struct vattr *vap,
+               struct thread *td);
+int vop_setattr(struct vnode *vp, struct vattr *vap,
+               struct ucred *cred, struct thread *td);
+int vop_read(struct vnode *vp, struct uio *uio, int ioflag,
+               struct ucred *cred);
+int vop_write(struct vnode *vp, struct uio *uio, int ioflag,
+               struct ucred *cred);
+int vop_lease(struct vnode *vp, struct thread *td,
+               struct ucred *cred, int flag);
+int vop_ioctl(struct vnode *vp, u_long command, caddr_t data,
+               int fflag, struct ucred *cred,
+               struct thread *td);
+int vop_poll(struct vnode *vp, int events, struct ucred *cred,
+               struct thread *td);
+int vop_kqfilter(struct vnode *vp, struct knote *kn);
+int vop_revoke(struct vnode *vp, int flags);
+int vop_mmap(struct vnode *vp, int fflags, struct ucred *cred,
+               struct thread *td);
+int vop_fsync(struct vnode *vp, int waitfor, struct thread *td);
+int vop_remove(struct vnode *dvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp);
+int vop_link(struct vnode *tdvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp);
+int vop_rename(struct vnode *fdvp, struct namecache *fpar,
+               struct vnode *fvp, struct componentname *fcnp,
+               struct vnode *tdvp, struct namecache *tpar,
+               struct vnode *tvp, struct componentname *tcnp);
+int vop_mkdir(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap);
+int vop_rmdir(struct vnode *dvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp);
+int vop_symlink(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap, char *target);
+int vop_readdir(struct vnode *vp, struct uio *uio,
+               struct ucred *cred, int *eofflag, 
+               int *ncookies, u_long **cookies);
+int vop_readlink(struct vnode *vp, struct uio *uio,
+               struct ucred *cred);
+int vop_inactive(struct vnode *vp, struct thread *td);
+int vop_reclaim(struct vnode *vp, struct thread *td);
+int vop_lock(struct vnode *vp, struct lwkt_tokref *vlock,
+               int flags, struct thread *td);
+int vop_unlock(struct vnode *vp, struct lwkt_tokref *vlock,
+               int flags, struct thread *td);
+int vop_bmap(struct vnode *vp, daddr_t bn, struct vnode **vpp,
+               daddr_t *bnp, int *runp, int *runb);
+int vop_strategy(struct vnode *vp, struct buf *bp);
+int vop_print(struct vnode *vp);
+int vop_pathconf(struct vnode *vp, int name,
+               register_t *retval);
+int vop_advlock(struct vnode *vp, caddr_t id, int op,
+               struct flock *fl, int flags);
+int vop_balloc(struct vnode *vp, off_t startoffset,
+               int size, struct ucred *cred, int flags,
+               struct buf **bpp);
+int vop_reallocblks(struct vnode *vp,
+               struct cluster_save *buflist);
+int vop_getpages(struct vnode *vp, struct vm_page **m, int count,
+               int reqpage, vm_ooffset_t offset);
+int vop_putpages(struct vnode *vp, struct vm_page **m, int count,
+               int sync, int *rtvals,
+               vm_ooffset_t offset);
+int vop_freeblks(struct vnode *vp, daddr_t addr,
+               daddr_t length);
+int vop_bwrite(struct vnode *vp, struct buf *bp);
+int vop_getacl(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td);
+int vop_setacl(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td);
+int vop_aclcheck(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td);
+int vop_getextattr(struct vnode *vp, char *name, 
+               struct uio *uio, struct ucred *cred,
+               struct thread *td);
+int vop_setextattr(struct vnode *vp, char *name, 
+               struct uio *uio, struct ucred *cred,
+               struct thread *td);
+int vop_createvobject(struct vnode *vp, struct thread *td);
+int vop_destroyvobject(struct vnode *vp);
+int vop_getvobject(struct vnode *vp, struct vm_object **objpp);
+
+/*
+ * VOP operations descriptor.  This is used by the vopops compiler
+ * to convert VFS vector arrays (typically in vfs/blah/blah_vnops.c)
+ * into a vop_ops operations vector.
+ */
+extern struct vnodeop_desc vop_default_desc;
+extern struct vnodeop_desc vop_islocked_desc;
+extern struct vnodeop_desc vop_lookup_desc;
+extern struct vnodeop_desc vop_cachedlookup_desc;
+extern struct vnodeop_desc vop_create_desc;
+extern struct vnodeop_desc vop_whiteout_desc;
+extern struct vnodeop_desc vop_mknod_desc;
+extern struct vnodeop_desc vop_open_desc;
+extern struct vnodeop_desc vop_close_desc;
+extern struct vnodeop_desc vop_access_desc;
+extern struct vnodeop_desc vop_getattr_desc;
+extern struct vnodeop_desc vop_setattr_desc;
+extern struct vnodeop_desc vop_read_desc;
+extern struct vnodeop_desc vop_write_desc;
+extern struct vnodeop_desc vop_lease_desc;
+extern struct vnodeop_desc vop_ioctl_desc;
+extern struct vnodeop_desc vop_poll_desc;
+extern struct vnodeop_desc vop_kqfilter_desc;
+extern struct vnodeop_desc vop_revoke_desc;
+extern struct vnodeop_desc vop_mmap_desc;
+extern struct vnodeop_desc vop_fsync_desc;
+extern struct vnodeop_desc vop_remove_desc;
+extern struct vnodeop_desc vop_link_desc;
+extern struct vnodeop_desc vop_rename_desc;
+extern struct vnodeop_desc vop_mkdir_desc;
+extern struct vnodeop_desc vop_rmdir_desc;
+extern struct vnodeop_desc vop_symlink_desc;
+extern struct vnodeop_desc vop_readdir_desc;
+extern struct vnodeop_desc vop_readlink_desc;
+extern struct vnodeop_desc vop_inactive_desc;
+extern struct vnodeop_desc vop_reclaim_desc;
+extern struct vnodeop_desc vop_lock_desc;
+extern struct vnodeop_desc vop_unlock_desc;
+extern struct vnodeop_desc vop_bmap_desc;
+extern struct vnodeop_desc vop_strategy_desc;
+extern struct vnodeop_desc vop_print_desc;
+extern struct vnodeop_desc vop_pathconf_desc;
+extern struct vnodeop_desc vop_advlock_desc;
+extern struct vnodeop_desc vop_balloc_desc;
+extern struct vnodeop_desc vop_reallocblks_desc;
+extern struct vnodeop_desc vop_getpages_desc;
+extern struct vnodeop_desc vop_putpages_desc;
+extern struct vnodeop_desc vop_freeblks_desc;
+extern struct vnodeop_desc vop_bwrite_desc;
+extern struct vnodeop_desc vop_getacl_desc;
+extern struct vnodeop_desc vop_setacl_desc;
+extern struct vnodeop_desc vop_aclcheck_desc;
+extern struct vnodeop_desc vop_getextattr_desc;
+extern struct vnodeop_desc vop_setextattr_desc;
+extern struct vnodeop_desc vop_createvobject_desc;
+extern struct vnodeop_desc vop_destroyvobject_desc;
+extern struct vnodeop_desc vop_getvobject_desc;
+
+#endif
+
+/*
+ * VOP_ macro compatibility.  Remove these as we get rid of the VOP macros.
+ */
+#define VOP_ISLOCKED(vp, td)                           \
+       vop_islocked(vp, td)
+#define VOP_LOOKUP(dvp, par, vpp, ncpp, cnp)           \
+       vop_lookup(dvp, par, vpp, ncpp, cnp)
+#define VOP_CACHEDLOOKUP(dvp, par, vpp, ncpp, cnp)     \
+       vop_cachedlookup(dvp, par, vpp, ncpp, cnp)
+#define VOP_CREATE(dvp, par, vpp, cnp, vap)            \
+       vop_create(dvp, par, vpp, cnp, vap)
+#define VOP_WHITEOUT(dvp, par, cnp, flags)             \
+       vop_whiteout(dvp, par, cnp, flags)
+#define VOP_MKNOD(dvp, par, vpp, cnp, vap)             \
+       vop_mknod(dvp, par, vpp, cnp, vap)
+#define VOP_OPEN(vp, mode, cred, td)                   \
+       vop_open(vp, mode, cred, td)
+#define VOP_CLOSE(vp, fflag, td)                       \
+       vop_close(vp, fflag, td)
+#define VOP_ACCESS(vp, mode, cred, td)                 \
+       vop_access(vp, mode, cred, td)
+#define VOP_GETATTR(vp, vap, td)                       \
+       vop_getattr(vp, vap, td)
+#define VOP_SETATTR(vp, vap, cred, td)                 \
+       vop_setattr(vp, vap, cred, td)
+#define VOP_READ(vp, uio, ioflag, cred)                        \
+       vop_read(vp, uio, ioflag, cred)
+#define VOP_WRITE(vp, uio, ioflag, cred)               \
+       vop_write(vp, uio, ioflag, cred)
+#define VOP_LEASE(vp, td, cred, flag)                  \
+       vop_lease(vp, td, cred, flag)
+#define VOP_IOCTL(vp, command, data, fflag, cred, td)  \
+       vop_ioctl(vp, command, data, fflag, cred, td)
+#define VOP_POLL(vp, events, cred, td)                 \
+       vop_poll(vp, events, cred, td)
+#define VOP_KQFILTER(vp, kn)                           \
+       vop_kqfilter(vp, kn)
+#define VOP_REVOKE(vp, flags)                          \
+       vop_revoke(vp, flags)
+#define VOP_MMAP(vp, fflags, cred, td)                 \
+       vop_mmap(vp, fflags, cred, td)
+#define VOP_FSYNC(vp, waitfor, td)                     \
+       vop_fsync(vp, waitfor, td)
+#define VOP_REMOVE(dvp, par, vp, cnp)                  \
+       vop_remove(dvp, par, vp, cnp)
+#define VOP_LINK(tdvp, par, vp, cnp)                   \
+       vop_link(tdvp, par, vp, cnp)
+#define VOP_RENAME(fdvp, fpar, fvp, fcnp, tdvp, tpar, tvp, tcnp)       \
+       vop_rename(fdvp, fpar, fvp, fcnp, tdvp, tpar, tvp, tcnp)
+#define VOP_MKDIR(dvp, par, vpp, cnp, vap)             \
+       vop_mkdir(dvp, par, vpp, cnp, vap)
+#define VOP_RMDIR(dvp, par, vp, cnp)                   \
+       vop_rmdir(dvp, par, vp, cnp)
+#define VOP_SYMLINK(dvp, par, vpp, cnp, vap, target)   \
+       vop_symlink(dvp, par, vpp, cnp, vap, target)
+#define VOP_READDIR(vp, uio, cred, eofflag, ncookies, cookies)         \
+       vop_readdir(vp, uio, cred, eofflag, ncookies, cookies)
+#define VOP_READLINK(vp, uio, cred)                    \
+       vop_readlink(vp, uio, cred)
+#define VOP_INACTIVE(vp, td)                           \
+       vop_inactive(vp, td)
+#define VOP_RECLAIM(vp, td)                            \
+       vop_reclaim(vp, td)
+#define VOP_LOCK(vp, vlock, flags, td)                 \
+       vop_lock(vp, vlock, flags, td)
+#define VOP_UNLOCK(vp, vlock, flags, td)               \
+       vop_unlock(vp, vlock, flags, td)
+#define VOP_BMAP(vp, bn, vpp, bnp, runp, runb)         \
+       vop_bmap(vp, bn, vpp, bnp, runp, runb)
+#define VOP_STRATEGY(vp, bp)                           \
+       vop_strategy(vp, bp)
+#define VOP_PRINT(vp)                                  \
+       vop_print(vp)
+#define VOP_PATHCONF(vp, name, retval)                 \
+       vop_pathconf(vp, name, retval)
+#define VOP_ADVLOCK(vp, id, op, fl, flags)             \
+       vop_advlock(vp, id, op, fl, flags)
+#define VOP_BALLOC(vp, offset, size, cred, flags, bpp) \
+       vop_balloc(vp, offset, size, cred, flags, bpp)
+#define VOP_REALLOCBLKS(vp, buflist)                   \
+       vop_reallocblks(vp, buflist)
+#define VOP_GETPAGES(vp, m, count, reqpage, off)       \
+       vop_getpages(vp, m, count, reqpage, off)
+#define VOP_PUTPAGES(vp, m, count, sync, rtvals, off)  \
+       vop_putpages(vp, m, count, sync, rtvals, off)
+#define VOP_FREEBLKS(vp, addr, length)                 \
+       vop_freeblks(vp, addr, length)
+#define VOP_BWRITE(vp, bp)                             \
+       vop_bwrite(vp, bp)
+#define VOP_GETACL(vp, type, aclp, cred, td)           \
+       vop_getacl(vp, type, aclp, cred, td)
+#define VOP_SETACL(vp, type, aclp, cred, td)           \
+       vop_setacl(vp, type, aclp, cred, td)
+#define VOP_ACLCHECK(vp, type, aclp, cred, td)         \
+       vop_aclcheck(vp, type, aclp, cred, td)
+#define VOP_GETEXTATTR(vp, name, uio, cred, td)                \
+       vop_getextattr(vp, name, uio, cred, td)
+#define VOP_SETEXTATTR(vp, name, uio, cred, td)                \
+       vop_setextattr(vp, name, uio, cred, td)
+#define VOP_CREATEVOBJECT(vp, td)                      \
+       vop_createvobject(vp, td)
+#define VOP_DESTROYVOBJECT(vp)                         \
+       vop_destroyvobject(vp)
+#define VOP_GETVOBJECT(vp, objpp)                      \
+       vop_getvobject(vp, objpp)
+
+#endif
+
index ad1d2fe..7071dc5 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)vnode.h     8.7 (Berkeley) 2/4/94
  * $FreeBSD: src/sys/sys/vnode.h,v 1.111.2.19 2002/12/29 18:19:53 dillon Exp $
- * $DragonFly: src/sys/sys/vnode.h,v 1.18 2004/06/03 18:09:33 hmp Exp $
+ * $DragonFly: src/sys/sys/vnode.h,v 1.19 2004/08/13 17:51:10 dillon Exp $
  */
 
 #ifndef _SYS_VNODE_H_
 #include <sys/uio.h>
 #include <sys/acl.h>
 #include <sys/namecache.h>
-
 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
 #include <sys/thread.h>
 #endif
+#include <sys/vopops.h>
 
 #include <machine/lock.h>
 
@@ -80,8 +80,6 @@ enum vtagtype {
  */
 TAILQ_HEAD(buflists, buf);
 
-typedef        int     vop_t (void *);
-
 /*
  * Reading or writing any of these items requires holding the appropriate lock.
  * v_freelist is locked by the global vnode_free_list token.
@@ -101,7 +99,7 @@ struct vnode {
        int     v_opencount;                    /* number of explicit opens */
        u_long  v_id;                           /* capability identifier */
        struct  mount *v_mount;                 /* ptr to vfs we are in */
-       vop_t   **v_op;                         /* vnode operations vector */
+       struct  vop_ops *v_vops;
        TAILQ_ENTRY(vnode) v_freelist;          /* vnode freelist */
        TAILQ_ENTRY(vnode) v_nmntvnodes;        /* vnodes for mount point */
        struct  buflists v_cleanblkhd;          /* clean blocklist head */
@@ -359,12 +357,6 @@ struct vnodeop_desc {
        int     vdesc_cred_offset;      /* cred location, if any */
        int     vdesc_proc_offset;      /* proc location, if any */
        int     vdesc_componentname_offset; /* if any */
-       /*
-        * Finally, we've got a list of private data (about each operation)
-        * for each transport layer.  (Support to manage this list is not
-        * yet part of BSD.)
-        */
-       caddr_t *vdesc_transports;
 };
 
 #ifdef _KERNEL
@@ -394,28 +386,25 @@ extern struct lwkt_token mntvnode_token;
 
 
 /*
- * This structure is used to configure the new vnodeops vector.
+ * This structure is used to configure the new vnodeops vector.  The entry
+ * descriptor describes a patricular VOP function while the operations
+ * vector descriptor recursively describes arrays of entry descriptors.
  */
 struct vnodeopv_entry_desc {
-       struct vnodeop_desc *opve_op;   /* which operation this is */
-       vop_t *opve_impl;               /* code implementing this operation */
+       struct vnodeop_desc *opve_op;
+       int     (*opve_func)(struct vop_generic_args *ap);
 };
+
 struct vnodeopv_desc {
-                       /* ptr to the ptr to the vector where op should go */
-       vop_t ***opv_desc_vector_p;
+       struct vop_ops **opv_desc_vector;           /* vect to allocate/fill*/
        struct vnodeopv_entry_desc *opv_desc_ops;   /* null terminated list */
 };
 
-/*
- * A generic structure.
- * This can be used by bypass routines to identify generic arguments.
- */
-struct vop_generic_args {
-       struct vnodeop_desc *a_desc;
-       /* other random data follows, presumably */
+struct vnodeopv_node {
+       TAILQ_ENTRY(vnodeopv_node)      entry;
+       const struct vnodeopv_desc      *vdesc;
 };
 
-
 #ifdef DEBUG_VFS_LOCKS
 /*
  * Macros to aid in tracing VFS locking problems.  Not totally
@@ -484,12 +473,15 @@ void      assert_vop_unlocked(struct vnode *vp, const char *str);
  * vclean changes the ops vector and then wants to call ops with the old
  * vector.
  */
-#define        VOCALL(OPSV,OFF,AP) (( *((OPSV)[(OFF)])) (AP))
+
+typedef int (*vocall_func_t)(struct vop_generic_args *);
+
+#define VOCALL(vops,off,ap)    (*(vocall_func_t *)((char *)(vops)+(off)))(ap)
 
 /*
  * This call works for vnodes in the kernel.
  */
-#define        VCALL(VP,OFF,AP) VOCALL((VP)->v_op,(OFF),(AP))
+#define        VCALL(VP,OFF,AP) VOCALL((VP)->v_vops,(OFF),(AP))
 #define        VDESC(OP) (& __CONCAT(OP,_desc))
 #define        VOFFSET(OP) (VDESC(OP)->vdesc_offset)
 
@@ -507,11 +499,6 @@ vn_canvmio(struct vnode *vp)
     return(FALSE); 
 }
 
-/*
- * Finally, include the default set of vnode operations.
- */
-#include "vnode_if.h"
-
 /*
  * Public vnode manipulation functions.
  */
@@ -538,7 +525,7 @@ int         bdevvp (dev_t dev, struct vnode **vpp);
 void   cvtstat (struct stat *st, struct ostat *ost);
 void   cvtnstat (struct stat *sb, struct nstat *nsb);
 int    getnewvnode (enum vtagtype tag,
-           struct mount *mp, vop_t **vops, struct vnode **vpp);
+           struct mount *mp, struct vop_ops *vops, struct vnode **vpp);
 int    lease_check (struct vop_lease_args *ap);
 int    spec_vnoperate (struct vop_generic_args *);
 int    speedup_syncer (void);
@@ -591,17 +578,17 @@ int       vfs_object_create (struct vnode *vp, struct thread *td);
 void   vfs_timestamp (struct timespec *);
 int    vn_writechk (struct vnode *vp);
 int    vop_stdbwrite (struct vop_bwrite_args *ap);
-int    vop_stdislocked (struct vop_islocked_args *);
-int    vop_stdlock (struct vop_lock_args *);
-int    vop_stdunlock (struct vop_unlock_args *);
-int    vop_noislocked (struct vop_islocked_args *);
-int    vop_nolock (struct vop_lock_args *);
-int    vop_nopoll (struct vop_poll_args *);
-int    vop_nounlock (struct vop_unlock_args *);
-int    vop_stdpathconf (struct vop_pathconf_args *);
-int    vop_stdpoll (struct vop_poll_args *);
-int    vop_revoke (struct vop_revoke_args *);
-int    vop_sharedlock (struct vop_lock_args *);
+int    vop_stdislocked (struct vop_islocked_args *ap);
+int    vop_stdlock (struct vop_lock_args *ap);
+int    vop_stdunlock (struct vop_unlock_args *ap);
+int    vop_noislocked (struct vop_islocked_args *ap);
+int    vop_nolock (struct vop_lock_args *ap);
+int    vop_nopoll (struct vop_poll_args *ap);
+int    vop_nounlock (struct vop_unlock_args *ap);
+int    vop_stdpathconf (struct vop_pathconf_args *ap);
+int    vop_stdpoll (struct vop_poll_args *ap);
+int    vop_stdrevoke (struct vop_revoke_args *ap);
+int    vop_sharedlock (struct vop_lock_args *ap);
 int    vop_eopnotsupp (struct vop_generic_args *ap);
 int    vop_ebadf (struct vop_generic_args *ap);
 int    vop_einval (struct vop_generic_args *ap);
@@ -617,8 +604,8 @@ void        vput (struct vnode *vp);
 void   vrele (struct vnode *vp);
 void   vref (struct vnode *vp);
 
-extern vop_t   **default_vnodeop_p;
-extern vop_t **spec_vnodeop_p;
+extern struct vop_ops *default_vnode_vops;
+extern struct vop_ops *spec_vnode_vops;
 
 #endif /* _KERNEL */
 
diff --git a/sys/sys/vopops.h b/sys/sys/vopops.h
new file mode 100644 (file)
index 0000000..81e48e4
--- /dev/null
@@ -0,0 +1,895 @@
+/*
+ * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
+ * 
+ * This code is derived from software contributed to The DragonFly Project
+ * by Matthew Dillon <dillon@backplane.com>
+ * 
+ * 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 DragonFly Project 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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.
+ *
+ * $DragonFly: src/sys/sys/Attic/vopops.h,v 1.1 2004/08/13 17:51:10 dillon Exp $
+ */
+
+/*
+ * The vopops structure vectors all access to a filesystem.  It contains a
+ * fixed set of vectors which are 'compiled' by the vnodeopv_entry_desc
+ * array that is typically declared in "vfs/blah/blah_vnops.c".
+ *
+ * In DragonFly the ultimate goal is to thread the VFS, which means that
+ * the dispatch functions will eventually be called from the context of 
+ * a management thread rather then directly called by a process.  This
+ * requires us to divorce direct process dependancies (in particular ioctl
+ * and UIO's).  In addition, it is our intention to implement kernel
+ * level cache management and coherency in the vop_*() interfacing
+ * layer.
+ *
+ * The number of management threads will depend on the VFS.  The idea is
+ * to give a high performance VFS such as UFS at least one thread per cpu,
+ * and a low performance VFS such as CD9660 perhaps just one thread period.
+ * Blocking issues within the management thread are up to the VFS itself,
+ * but DragonFly will introduce a layer above the VFS to handle cacheable
+ * requests without having to enter the VFS (e.g. by making attribute
+ * and VM object information a permanent fixture of the vnode structure
+ * and accessing them directly).
+ *
+ * THE VOPOPS VECTORS SHOULD NEVER BE CALLED DIRECTLY!  Instead always use
+ * the kernel helper procedures vop_*() to call a vopop.  The kernel
+ * helper procedure will be responsible for handling the DragonFly messaging
+ * conversion when it occurs.
+ */
+
+#ifndef _SYS_VOPOPS_H_
+#define        _SYS_VOPOPS_H_
+
+struct vnode;
+struct thread;
+struct namecache;
+struct componentname;
+struct vattr;
+struct ucred;
+struct uio;
+struct knote;
+struct vm_object;
+struct vm_page;
+
+struct vop_generic_args {
+       struct vnodeop_desc *a_desc;
+};
+
+struct vop_islocked_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+};
+
+struct vop_lookup_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct namecache **a_ncpp;
+       struct componentname *a_cnp;
+};
+
+struct vop_cachedlookup_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct namecache **a_ncpp;
+       struct componentname *a_cnp;
+};
+
+struct vop_create_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct componentname *a_cnp;
+       struct vattr *a_vap;
+};
+
+struct vop_whiteout_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct componentname *a_cnp;
+       int a_flags;
+};
+
+struct vop_mknod_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct componentname *a_cnp;
+       struct vattr *a_vap;
+};
+
+struct vop_open_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_mode;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_close_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_fflag;
+       struct thread *a_td;
+};
+
+struct vop_access_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_mode;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_getattr_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vattr *a_vap;
+       struct thread *a_td;
+};
+
+struct vop_setattr_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vattr *a_vap;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_read_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct uio *a_uio;
+       int a_ioflag;
+       struct ucred *a_cred;
+};
+
+struct vop_write_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct uio *a_uio;
+       int a_ioflag;
+       struct ucred *a_cred;
+};
+
+struct vop_lease_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+       struct ucred *a_cred;
+       int a_flag;
+};
+
+struct vop_ioctl_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       u_long a_command;
+       caddr_t a_data;
+       int a_fflag;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_poll_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_events;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_kqfilter_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct knote *a_kn;
+};
+
+struct vop_revoke_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_flags;
+};
+
+struct vop_mmap_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_fflags;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_fsync_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_waitfor;
+       struct thread *a_td;
+};
+
+struct vop_remove_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode *a_vp;
+       struct componentname *a_cnp;
+};
+
+struct vop_link_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_tdvp;
+       struct namecache *a_par;
+       struct vnode *a_vp;
+       struct componentname *a_cnp;
+};
+
+struct vop_rename_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_fdvp;
+       struct namecache *a_fpar;
+       struct vnode *a_fvp;
+       struct componentname *a_fcnp;
+       struct vnode *a_tdvp;
+       struct namecache *a_tpar;
+       struct vnode *a_tvp;
+       struct componentname *a_tcnp;
+};
+
+struct vop_mkdir_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct componentname *a_cnp;
+       struct vattr *a_vap;
+};
+
+struct vop_rmdir_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode *a_vp;
+       struct componentname *a_cnp;
+};
+
+struct vop_symlink_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_dvp;
+       struct namecache *a_par;
+       struct vnode **a_vpp;
+       struct componentname *a_cnp;
+       struct vattr *a_vap;
+       char *a_target;
+};
+
+struct vop_readdir_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct uio *a_uio;
+       struct ucred *a_cred;
+       int *a_eofflag;
+       int *a_ncookies;
+       u_long **a_cookies;
+};
+
+struct vop_readlink_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct uio *a_uio;
+       struct ucred *a_cred;
+};
+
+struct vop_inactive_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+};
+
+struct vop_reclaim_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+};
+
+struct vop_lock_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct lwkt_tokref *a_vlock;
+       int a_flags;
+       struct thread *a_td;
+};
+
+struct vop_unlock_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct lwkt_tokref *a_vlock;
+       int a_flags;
+       struct thread *a_td;
+};
+
+struct vop_bmap_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       daddr_t a_bn;
+       struct vnode **a_vpp;
+       daddr_t *a_bnp;
+       int *a_runp;
+       int *a_runb;
+};
+
+struct vop_strategy_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct buf *a_bp;
+};
+
+struct vop_print_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+};
+
+struct vop_pathconf_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       int a_name;
+       register_t *a_retval;
+};
+
+struct vop_advlock_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       caddr_t a_id;
+       int a_op;
+       struct flock *a_fl;
+       int a_flags;
+};
+
+struct vop_balloc_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       off_t a_startoffset;
+       int a_size;
+       struct ucred *a_cred;
+       int a_flags;
+       struct buf **a_bpp;
+};
+
+struct vop_reallocblks_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct cluster_save *a_buflist;
+};
+
+struct vop_getpages_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vm_page **a_m;
+       int a_count;
+       int a_reqpage;
+       vm_ooffset_t a_offset;
+};
+
+struct vop_putpages_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vm_page **a_m;
+       int a_count;
+       int a_sync;
+       int *a_rtvals;
+       vm_ooffset_t a_offset;
+};
+
+struct vop_freeblks_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       daddr_t a_addr;
+       daddr_t a_length;
+};
+
+struct vop_bwrite_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct buf *a_bp;
+};
+
+struct vop_getacl_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       acl_type_t a_type;
+       struct acl *a_aclp;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_setacl_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       acl_type_t a_type;
+       struct acl *a_aclp;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_aclcheck_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       acl_type_t a_type;
+       struct acl *a_aclp;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_getextattr_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       char *a_name;
+       struct uio *a_uio;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_setextattr_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       char *a_name;
+       struct uio *a_uio;
+       struct ucred *a_cred;
+       struct thread *a_td;
+};
+
+struct vop_createvobject_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct thread *a_td;
+};
+
+struct vop_destroyvobject_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+};
+
+struct vop_getvobject_args {
+       struct vop_generic_args a_head;
+       struct vnode *a_vp;
+       struct vm_object **a_objpp;
+};
+
+/*
+ * This structure is the post-compiled VOP operations vector and should only
+ * be used by kern/vfs_vopops.c.
+ */
+struct vop_ops {
+       int     vv_refs;
+       struct vop_ops *vv_new;
+#define vop_ops_first_field    vop_default
+       int     (*vop_default)(struct vop_generic_args *);
+       int     (*vop_islocked)(struct vop_islocked_args *);
+       int     (*vop_lookup)(struct vop_lookup_args *);
+       int     (*vop_cachedlookup)(struct vop_cachedlookup_args *);
+       int     (*vop_create)(struct vop_create_args *);
+       int     (*vop_whiteout)(struct vop_whiteout_args *);
+       int     (*vop_mknod)(struct vop_mknod_args *);
+       int     (*vop_open)(struct vop_open_args *);
+       int     (*vop_close)(struct vop_close_args *);
+       int     (*vop_access)(struct vop_access_args *);
+       int     (*vop_getattr)(struct vop_getattr_args *);
+       int     (*vop_setattr)(struct vop_setattr_args *);
+       int     (*vop_read)(struct vop_read_args *);
+       int     (*vop_write)(struct vop_write_args *);
+       int     (*vop_lease)(struct vop_lease_args *);
+       int     (*vop_ioctl)(struct vop_ioctl_args *);
+       int     (*vop_poll)(struct vop_poll_args *);
+       int     (*vop_kqfilter)(struct vop_kqfilter_args *);
+       int     (*vop_revoke)(struct vop_revoke_args *);
+       int     (*vop_mmap)(struct vop_mmap_args *);
+       int     (*vop_fsync)(struct vop_fsync_args *);
+       int     (*vop_remove)(struct vop_remove_args *);
+       int     (*vop_link)(struct vop_link_args *);
+       int     (*vop_rename)(struct vop_rename_args *);
+       int     (*vop_mkdir)(struct vop_mkdir_args *);
+       int     (*vop_rmdir)(struct vop_rmdir_args *);
+       int     (*vop_symlink)(struct vop_symlink_args *);
+       int     (*vop_readdir)(struct vop_readdir_args *);
+       int     (*vop_readlink)(struct vop_readlink_args *);
+       int     (*vop_inactive)(struct vop_inactive_args *);
+       int     (*vop_reclaim)(struct vop_reclaim_args *);
+       int     (*vop_lock)(struct vop_lock_args *);
+       int     (*vop_unlock)(struct vop_unlock_args *);
+       int     (*vop_bmap)(struct vop_bmap_args *);
+       int     (*vop_strategy)(struct vop_strategy_args *);
+       int     (*vop_print)(struct vop_print_args *);
+       int     (*vop_pathconf)(struct vop_pathconf_args *);
+       int     (*vop_advlock)(struct vop_advlock_args *);
+       int     (*vop_balloc)(struct vop_balloc_args *);
+       int     (*vop_reallocblks)(struct vop_reallocblks_args *);
+       int     (*vop_getpages)(struct vop_getpages_args *);
+       int     (*vop_putpages)(struct vop_putpages_args *);
+       int     (*vop_freeblks)(struct vop_freeblks_args *);
+       int     (*vop_bwrite)(struct vop_bwrite_args *);
+       int     (*vop_getacl)(struct vop_getacl_args *);
+       int     (*vop_setacl)(struct vop_setacl_args *);
+       int     (*vop_aclcheck)(struct vop_aclcheck_args *);
+       int     (*vop_getextattr)(struct vop_getextattr_args *);
+       int     (*vop_setextattr)(struct vop_setextattr_args *);
+       int     (*vop_createvobject)(struct vop_createvobject_args *);
+       int     (*vop_destroyvobject)(struct vop_destroyvobject_args *);
+       int     (*vop_getvobject)(struct vop_getvobject_args *);
+#define vop_ops_last_field     vop_getvobject
+};
+
+/*
+ * Kernel VOP arguments union, suitable for malloc / embedding in other
+ * structures.  The vop_args_union can hold any VOP call argument structure.
+ * Note that vu_head is broken out.
+ */
+union vop_args_union {
+       struct vop_generic_args vu_head;
+       struct vop_generic_args vu_default;
+       struct vop_islocked_args vu_islocked;
+       struct vop_lookup_args vu_lookup;
+       struct vop_cachedlookup_args vu_cachedlookup;
+       struct vop_create_args vu_create;
+       struct vop_whiteout_args vu_whiteout;
+       struct vop_mknod_args vu_mknod;
+       struct vop_open_args vu_open;
+       struct vop_close_args vu_close;
+       struct vop_access_args vu_access;
+       struct vop_getattr_args vu_getattr;
+       struct vop_setattr_args vu_setattr;
+       struct vop_read_args vu_read;
+       struct vop_write_args vu_write;
+       struct vop_lease_args vu_lease;
+       struct vop_ioctl_args vu_ioctl;
+       struct vop_poll_args vu_poll;
+       struct vop_kqfilter_args vu_kqfilter;
+       struct vop_revoke_args vu_revoke;
+       struct vop_mmap_args vu_mmap;
+       struct vop_fsync_args vu_fsync;
+       struct vop_remove_args vu_remove;
+       struct vop_link_args vu_link;
+       struct vop_rename_args vu_rename;
+       struct vop_mkdir_args vu_mkdir;
+       struct vop_rmdir_args vu_rmdir;
+       struct vop_symlink_args vu_symlink;
+       struct vop_readdir_args vu_readdir;
+       struct vop_readlink_args vu_readlink;
+       struct vop_inactive_args vu_inactive;
+       struct vop_reclaim_args vu_reclaim;
+       struct vop_lock_args vu_lock;
+       struct vop_unlock_args vu_unlock;
+       struct vop_bmap_args vu_bmap;
+       struct vop_strategy_args vu_strategy;
+       struct vop_print_args vu_print;
+       struct vop_pathconf_args vu_pathconf;
+       struct vop_advlock_args vu_advlock;
+       struct vop_balloc_args vu_balloc;
+       struct vop_reallocblks_args vu_reallocblks;
+       struct vop_getpages_args vu_getpages;
+       struct vop_putpages_args vu_putpages;
+       struct vop_freeblks_args vu_freeblks;
+       struct vop_bwrite_args vu_bwrite;
+       struct vop_getacl_args vu_getacl;
+       struct vop_setacl_args vu_setacl;
+       struct vop_aclcheck_args vu_aclcheck;
+       struct vop_getextattr_args vu_getextattr;
+       struct vop_setextattr_args vu_setextattr;
+       struct vop_createvobject_args vu_createvobject;
+       struct vop_destroyvobject_args vu_destroyvobject;
+       struct vop_getvobject_args vu_getvobject;
+};
+
+#ifdef _KERNEL
+
+/*
+ * Kernel VOP call wrappers.  These wrappers are responsible for wrapping
+ * the arguments in the appropriate VOP arguments structure, sending the
+ * message, and waiting for a reply.  All kernel and VFS code should generally
+ * call these wrappers rather then attempt to call the operations vector
+ * routine directly in order to allow DragonFly to properly wrap the operation
+ * in a message and dispatch it to the correct thread.
+ */
+int vop_islocked(struct vnode *vp, struct thread *td);
+int vop_lookup(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct namecache **ncpp,
+               struct componentname *cnp);
+int vop_cachedlookup(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct namecache **ncpp,
+               struct componentname *cnp);
+int vop_create(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap);
+int vop_whiteout(struct vnode *dvp, struct namecache *par,
+               struct componentname *cnp, int flags);
+int vop_mknod(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap);
+int vop_open(struct vnode *vp, int mode, struct ucred *cred,
+               struct thread *td);
+int vop_close(struct vnode *vp, int fflag, struct thread *td);
+int vop_access(struct vnode *vp, int mode, struct ucred *cred,
+               struct thread *td);
+int vop_getattr(struct vnode *vp, struct vattr *vap,
+               struct thread *td);
+int vop_setattr(struct vnode *vp, struct vattr *vap,
+               struct ucred *cred, struct thread *td);
+int vop_read(struct vnode *vp, struct uio *uio, int ioflag,
+               struct ucred *cred);
+int vop_write(struct vnode *vp, struct uio *uio, int ioflag,
+               struct ucred *cred);
+int vop_lease(struct vnode *vp, struct thread *td,
+               struct ucred *cred, int flag);
+int vop_ioctl(struct vnode *vp, u_long command, caddr_t data,
+               int fflag, struct ucred *cred,
+               struct thread *td);
+int vop_poll(struct vnode *vp, int events, struct ucred *cred,
+               struct thread *td);
+int vop_kqfilter(struct vnode *vp, struct knote *kn);
+int vop_revoke(struct vnode *vp, int flags);
+int vop_mmap(struct vnode *vp, int fflags, struct ucred *cred,
+               struct thread *td);
+int vop_fsync(struct vnode *vp, int waitfor, struct thread *td);
+int vop_remove(struct vnode *dvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp);
+int vop_link(struct vnode *tdvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp);
+int vop_rename(struct vnode *fdvp, struct namecache *fpar,
+               struct vnode *fvp, struct componentname *fcnp,
+               struct vnode *tdvp, struct namecache *tpar,
+               struct vnode *tvp, struct componentname *tcnp);
+int vop_mkdir(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap);
+int vop_rmdir(struct vnode *dvp, struct namecache *par,
+               struct vnode *vp, struct componentname *cnp);
+int vop_symlink(struct vnode *dvp, struct namecache *par,
+               struct vnode **vpp, struct componentname *cnp,
+               struct vattr *vap, char *target);
+int vop_readdir(struct vnode *vp, struct uio *uio,
+               struct ucred *cred, int *eofflag, 
+               int *ncookies, u_long **cookies);
+int vop_readlink(struct vnode *vp, struct uio *uio,
+               struct ucred *cred);
+int vop_inactive(struct vnode *vp, struct thread *td);
+int vop_reclaim(struct vnode *vp, struct thread *td);
+int vop_lock(struct vnode *vp, struct lwkt_tokref *vlock,
+               int flags, struct thread *td);
+int vop_unlock(struct vnode *vp, struct lwkt_tokref *vlock,
+               int flags, struct thread *td);
+int vop_bmap(struct vnode *vp, daddr_t bn, struct vnode **vpp,
+               daddr_t *bnp, int *runp, int *runb);
+int vop_strategy(struct vnode *vp, struct buf *bp);
+int vop_print(struct vnode *vp);
+int vop_pathconf(struct vnode *vp, int name,
+               register_t *retval);
+int vop_advlock(struct vnode *vp, caddr_t id, int op,
+               struct flock *fl, int flags);
+int vop_balloc(struct vnode *vp, off_t startoffset,
+               int size, struct ucred *cred, int flags,
+               struct buf **bpp);
+int vop_reallocblks(struct vnode *vp,
+               struct cluster_save *buflist);
+int vop_getpages(struct vnode *vp, struct vm_page **m, int count,
+               int reqpage, vm_ooffset_t offset);
+int vop_putpages(struct vnode *vp, struct vm_page **m, int count,
+               int sync, int *rtvals,
+               vm_ooffset_t offset);
+int vop_freeblks(struct vnode *vp, daddr_t addr,
+               daddr_t length);
+int vop_bwrite(struct vnode *vp, struct buf *bp);
+int vop_getacl(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td);
+int vop_setacl(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td);
+int vop_aclcheck(struct vnode *vp, acl_type_t type,
+               struct acl *aclp, struct ucred *cred,
+               struct thread *td);
+int vop_getextattr(struct vnode *vp, char *name, 
+               struct uio *uio, struct ucred *cred,
+               struct thread *td);
+int vop_setextattr(struct vnode *vp, char *name, 
+               struct uio *uio, struct ucred *cred,
+               struct thread *td);
+int vop_createvobject(struct vnode *vp, struct thread *td);
+int vop_destroyvobject(struct vnode *vp);
+int vop_getvobject(struct vnode *vp, struct vm_object **objpp);
+
+/*
+ * VOP operations descriptor.  This is used by the vopops compiler
+ * to convert VFS vector arrays (typically in vfs/blah/blah_vnops.c)
+ * into a vop_ops operations vector.
+ */
+extern struct vnodeop_desc vop_default_desc;
+extern struct vnodeop_desc vop_islocked_desc;
+extern struct vnodeop_desc vop_lookup_desc;
+extern struct vnodeop_desc vop_cachedlookup_desc;
+extern struct vnodeop_desc vop_create_desc;
+extern struct vnodeop_desc vop_whiteout_desc;
+extern struct vnodeop_desc vop_mknod_desc;
+extern struct vnodeop_desc vop_open_desc;
+extern struct vnodeop_desc vop_close_desc;
+extern struct vnodeop_desc vop_access_desc;
+extern struct vnodeop_desc vop_getattr_desc;
+extern struct vnodeop_desc vop_setattr_desc;
+extern struct vnodeop_desc vop_read_desc;
+extern struct vnodeop_desc vop_write_desc;
+extern struct vnodeop_desc vop_lease_desc;
+extern struct vnodeop_desc vop_ioctl_desc;
+extern struct vnodeop_desc vop_poll_desc;
+extern struct vnodeop_desc vop_kqfilter_desc;
+extern struct vnodeop_desc vop_revoke_desc;
+extern struct vnodeop_desc vop_mmap_desc;
+extern struct vnodeop_desc vop_fsync_desc;
+extern struct vnodeop_desc vop_remove_desc;
+extern struct vnodeop_desc vop_link_desc;
+extern struct vnodeop_desc vop_rename_desc;
+extern struct vnodeop_desc vop_mkdir_desc;
+extern struct vnodeop_desc vop_rmdir_desc;
+extern struct vnodeop_desc vop_symlink_desc;
+extern struct vnodeop_desc vop_readdir_desc;
+extern struct vnodeop_desc vop_readlink_desc;
+extern struct vnodeop_desc vop_inactive_desc;
+extern struct vnodeop_desc vop_reclaim_desc;
+extern struct vnodeop_desc vop_lock_desc;
+extern struct vnodeop_desc vop_unlock_desc;
+extern struct vnodeop_desc vop_bmap_desc;
+extern struct vnodeop_desc vop_strategy_desc;
+extern struct vnodeop_desc vop_print_desc;
+extern struct vnodeop_desc vop_pathconf_desc;
+extern struct vnodeop_desc vop_advlock_desc;
+extern struct vnodeop_desc vop_balloc_desc;
+extern struct vnodeop_desc vop_reallocblks_desc;
+extern struct vnodeop_desc vop_getpages_desc;
+extern struct vnodeop_desc vop_putpages_desc;
+extern struct vnodeop_desc vop_freeblks_desc;
+extern struct vnodeop_desc vop_bwrite_desc;
+extern struct vnodeop_desc vop_getacl_desc;
+extern struct vnodeop_desc vop_setacl_desc;
+extern struct vnodeop_desc vop_aclcheck_desc;
+extern struct vnodeop_desc vop_getextattr_desc;
+extern struct vnodeop_desc vop_setextattr_desc;
+extern struct vnodeop_desc vop_createvobject_desc;
+extern struct vnodeop_desc vop_destroyvobject_desc;
+extern struct vnodeop_desc vop_getvobject_desc;
+
+#endif
+
+/*
+ * VOP_ macro compatibility.  Remove these as we get rid of the VOP macros.
+ */
+#define VOP_ISLOCKED(vp, td)                           \
+       vop_islocked(vp, td)
+#define VOP_LOOKUP(dvp, par, vpp, ncpp, cnp)           \
+       vop_lookup(dvp, par, vpp, ncpp, cnp)
+#define VOP_CACHEDLOOKUP(dvp, par, vpp, ncpp, cnp)     \
+       vop_cachedlookup(dvp, par, vpp, ncpp, cnp)
+#define VOP_CREATE(dvp, par, vpp, cnp, vap)            \
+       vop_create(dvp, par, vpp, cnp, vap)
+#define VOP_WHITEOUT(dvp, par, cnp, flags)             \
+       vop_whiteout(dvp, par, cnp, flags)
+#define VOP_MKNOD(dvp, par, vpp, cnp, vap)             \
+       vop_mknod(dvp, par, vpp, cnp, vap)
+#define VOP_OPEN(vp, mode, cred, td)                   \
+       vop_open(vp, mode, cred, td)
+#define VOP_CLOSE(vp, fflag, td)                       \
+       vop_close(vp, fflag, td)
+#define VOP_ACCESS(vp, mode, cred, td)                 \
+       vop_access(vp, mode, cred, td)
+#define VOP_GETATTR(vp, vap, td)                       \
+       vop_getattr(vp, vap, td)
+#define VOP_SETATTR(vp, vap, cred, td)                 \
+       vop_setattr(vp, vap, cred, td)
+#define VOP_READ(vp, uio, ioflag, cred)                        \
+       vop_read(vp, uio, ioflag, cred)
+#define VOP_WRITE(vp, uio, ioflag, cred)               \
+       vop_write(vp, uio, ioflag, cred)
+#define VOP_LEASE(vp, td, cred, flag)                  \
+       vop_lease(vp, td, cred, flag)
+#define VOP_IOCTL(vp, command, data, fflag, cred, td)  \
+       vop_ioctl(vp, command, data, fflag, cred, td)
+#define VOP_POLL(vp, events, cred, td)                 \
+       vop_poll(vp, events, cred, td)
+#define VOP_KQFILTER(vp, kn)                           \
+       vop_kqfilter(vp, kn)
+#define VOP_REVOKE(vp, flags)                          \
+       vop_revoke(vp, flags)
+#define VOP_MMAP(vp, fflags, cred, td)                 \
+       vop_mmap(vp, fflags, cred, td)
+#define VOP_FSYNC(vp, waitfor, td)                     \
+       vop_fsync(vp, waitfor, td)
+#define VOP_REMOVE(dvp, par, vp, cnp)                  \
+       vop_remove(dvp, par, vp, cnp)
+#define VOP_LINK(tdvp, par, vp, cnp)                   \
+       vop_link(tdvp, par, vp, cnp)
+#define VOP_RENAME(fdvp, fpar, fvp, fcnp, tdvp, tpar, tvp, tcnp)       \
+       vop_rename(fdvp, fpar, fvp, fcnp, tdvp, tpar, tvp, tcnp)
+#define VOP_MKDIR(dvp, par, vpp, cnp, vap)             \
+       vop_mkdir(dvp, par, vpp, cnp, vap)
+#define VOP_RMDIR(dvp, par, vp, cnp)                   \
+       vop_rmdir(dvp, par, vp, cnp)
+#define VOP_SYMLINK(dvp, par, vpp, cnp, vap, target)   \
+       vop_symlink(dvp, par, vpp, cnp, vap, target)
+#define VOP_READDIR(vp, uio, cred, eofflag, ncookies, cookies)         \
+       vop_readdir(vp, uio, cred, eofflag, ncookies, cookies)
+#define VOP_READLINK(vp, uio, cred)                    \
+       vop_readlink(vp, uio, cred)
+#define VOP_INACTIVE(vp, td)                           \
+       vop_inactive(vp, td)
+#define VOP_RECLAIM(vp, td)                            \
+       vop_reclaim(vp, td)
+#define VOP_LOCK(vp, vlock, flags, td)                 \
+       vop_lock(vp, vlock, flags, td)
+#define VOP_UNLOCK(vp, vlock, flags, td)               \
+       vop_unlock(vp, vlock, flags, td)
+#define VOP_BMAP(vp, bn, vpp, bnp, runp, runb)         \
+       vop_bmap(vp, bn, vpp, bnp, runp, runb)
+#define VOP_STRATEGY(vp, bp)                           \
+       vop_strategy(vp, bp)
+#define VOP_PRINT(vp)                                  \
+       vop_print(vp)
+#define VOP_PATHCONF(vp, name, retval)                 \
+       vop_pathconf(vp, name, retval)
+#define VOP_ADVLOCK(vp, id, op, fl, flags)             \
+       vop_advlock(vp, id, op, fl, flags)
+#define VOP_BALLOC(vp, offset, size, cred, flags, bpp) \
+       vop_balloc(vp, offset, size, cred, flags, bpp)
+#define VOP_REALLOCBLKS(vp, buflist)                   \
+       vop_reallocblks(vp, buflist)
+#define VOP_GETPAGES(vp, m, count, reqpage, off)       \
+       vop_getpages(vp, m, count, reqpage, off)
+#define VOP_PUTPAGES(vp, m, count, sync, rtvals, off)  \
+       vop_putpages(vp, m, count, sync, rtvals, off)
+#define VOP_FREEBLKS(vp, addr, length)                 \
+       vop_freeblks(vp, addr, length)
+#define VOP_BWRITE(vp, bp)                             \
+       vop_bwrite(vp, bp)
+#define VOP_GETACL(vp, type, aclp, cred, td)           \
+       vop_getacl(vp, type, aclp, cred, td)
+#define VOP_SETACL(vp, type, aclp, cred, td)           \
+       vop_setacl(vp, type, aclp, cred, td)
+#define VOP_ACLCHECK(vp, type, aclp, cred, td)         \
+       vop_aclcheck(vp, type, aclp, cred, td)
+#define VOP_GETEXTATTR(vp, name, uio, cred, td)                \
+       vop_getextattr(vp, name, uio, cred, td)
+#define VOP_SETEXTATTR(vp, name, uio, cred, td)                \
+       vop_setextattr(vp, name, uio, cred, td)
+#define VOP_CREATEVOBJECT(vp, td)                      \
+       vop_createvobject(vp, td)
+#define VOP_DESTROYVOBJECT(vp)                         \
+       vop_destroyvobject(vp)
+#define VOP_GETVOBJECT(vp, objpp)                      \
+       vop_getvobject(vp, objpp)
+
+#endif
+
index 4a00738..a9abed6 100644 (file)
@@ -1,9 +1,8 @@
 # $FreeBSD: src/sys/modules/coda/Makefile,v 1.7.2.1 2001/07/24 09:49:42 dd Exp $
-# $DragonFly: src/sys/vfs/coda/Attic/Makefile,v 1.3 2003/08/15 07:26:14 dillon Exp $
+# $DragonFly: src/sys/vfs/coda/Attic/Makefile,v 1.4 2004/08/13 17:51:10 dillon Exp $
 
 KMOD=  coda
-SRCS=  vnode_if.h \
-       coda_fbsd.c coda_namecache.c coda_psdev.c coda_subr.c \
+SRCS=  coda_fbsd.c coda_namecache.c coda_psdev.c coda_subr.c \
        coda_venus.c coda_vfsops.c coda_vnops.c use_vcoda.h
 NOMAN=
 
index 3b28e36..2627f98 100644 (file)
@@ -28,7 +28,7 @@
  * 
  *     @(#) src/sys/coda/coda_vnops.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
  * $FreeBSD: src/sys/coda/coda_vnops.c,v 1.22.2.1 2001/06/29 16:26:22 shafeeq Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_vnops.c,v 1.16 2004/07/26 15:59:48 joerg Exp $
+ * $DragonFly: src/sys/vfs/coda/Attic/coda_vnops.c,v 1.17 2004/08/13 17:51:10 dillon Exp $
  * 
  */
 
@@ -82,7 +82,7 @@ int coda_attr_cache  = 1;       /* Set to cache attributes in the kernel */
 int coda_symlink_cache = 1;     /* Set to cache symbolic link information */
 int coda_access_cache = 1;      /* Set to handle some access checks directly */
 
-int (**coda_vnodeop_p)(void *);
+struct vop_ops *coda_vnode_vops;
 
 /* structure to keep track of vfs calls */
 
@@ -112,46 +112,46 @@ static int coda_lockdebug = 0;
 /* Definition of the vnode operation vector */
 
 struct vnodeopv_entry_desc coda_vnodeop_entries[] = {
-    { &vop_default_desc, coda_vop_error },
-    { &vop_lookup_desc, coda_lookup },         /* lookup */
-    { &vop_create_desc, coda_create },         /* create */
-    { &vop_mknod_desc, coda_vop_error },       /* mknod */
-    { &vop_open_desc, coda_open },             /* open */
-    { &vop_close_desc, coda_close },           /* close */
-    { &vop_access_desc, coda_access },         /* access */
-    { &vop_getattr_desc, coda_getattr },       /* getattr */
-    { &vop_setattr_desc, coda_setattr },       /* setattr */
-    { &vop_read_desc, coda_read },             /* read */
-    { &vop_write_desc, coda_write },           /* write */
-    { &vop_ioctl_desc, coda_ioctl },           /* ioctl */
-    { &vop_mmap_desc, coda_vop_error },                /* mmap */
-    { &vop_fsync_desc, coda_fsync },           /* fsync */
-    { &vop_remove_desc, coda_remove },         /* remove */
-    { &vop_link_desc, coda_link },             /* link */
-    { &vop_rename_desc, coda_rename },         /* rename */
-    { &vop_mkdir_desc, coda_mkdir },           /* mkdir */
-    { &vop_rmdir_desc, coda_rmdir },           /* rmdir */
-    { &vop_symlink_desc, coda_symlink },       /* symlink */
-    { &vop_readdir_desc, coda_readdir },       /* readdir */
-    { &vop_readlink_desc, coda_readlink },     /* readlink */
-    { &vop_inactive_desc, coda_inactive },     /* inactive */
-    { &vop_reclaim_desc, coda_reclaim },       /* reclaim */
-    { &vop_lock_desc, coda_lock },             /* lock */
-    { &vop_unlock_desc, coda_unlock },         /* unlock */
-    { &vop_bmap_desc, coda_bmap },             /* bmap */
-    { &vop_strategy_desc, coda_strategy },     /* strategy */
-    { &vop_print_desc, coda_vop_error },       /* print */
-    { &vop_islocked_desc, coda_islocked },     /* islocked */
-    { &vop_pathconf_desc, coda_vop_error },    /* pathconf */
-    { &vop_advlock_desc, coda_vop_nop },       /* advlock */
-    { &vop_bwrite_desc, coda_vop_error },      /* bwrite */
-    { &vop_lease_desc, coda_vop_nop },         /* lease */
-    { &vop_poll_desc, (vop_t *) vop_stdpoll },
-    { &vop_getpages_desc, coda_fbsd_getpages },        /* pager intf.*/
-    { &vop_putpages_desc, coda_fbsd_putpages },        /* pager intf.*/
-    { &vop_createvobject_desc,      (vop_t *) vop_stdcreatevobject },
-    { &vop_destroyvobject_desc,     (vop_t *) vop_stddestroyvobject },
-    { &vop_getvobject_desc,         (vop_t *) vop_stdgetvobject },
+    { &vop_default_desc, (void *)coda_vop_error },
+    { &vop_lookup_desc, (void *)coda_lookup },         /* lookup */
+    { &vop_create_desc, (void *)coda_create },         /* create */
+    { &vop_mknod_desc, (void *)coda_vop_error },       /* mknod */
+    { &vop_open_desc, (void *)coda_open },             /* open */
+    { &vop_close_desc, (void *)coda_close },           /* close */
+    { &vop_access_desc, (void *)coda_access },         /* access */
+    { &vop_getattr_desc, (void *)coda_getattr },       /* getattr */
+    { &vop_setattr_desc, (void *)coda_setattr },       /* setattr */
+    { &vop_read_desc, (void *)coda_read },             /* read */
+    { &vop_write_desc, (void *)coda_write },           /* write */
+    { &vop_ioctl_desc, (void *)coda_ioctl },           /* ioctl */
+    { &vop_mmap_desc, (void *)coda_vop_error },                /* mmap */
+    { &vop_fsync_desc, (void *)coda_fsync },           /* fsync */
+    { &vop_remove_desc, (void *)coda_remove },         /* remove */
+    { &vop_link_desc, (void *)coda_link },             /* link */
+    { &vop_rename_desc, (void *)coda_rename },         /* rename */
+    { &vop_mkdir_desc, (void *)coda_mkdir },           /* mkdir */
+    { &vop_rmdir_desc, (void *)coda_rmdir },           /* rmdir */
+    { &vop_symlink_desc, (void *)coda_symlink },       /* symlink */
+    { &vop_readdir_desc, (void *)coda_readdir },       /* readdir */
+    { &vop_readlink_desc, (void *)coda_readlink },     /* readlink */
+    { &vop_inactive_desc, (void *)coda_inactive },     /* inactive */
+    { &vop_reclaim_desc, (void *)coda_reclaim },       /* reclaim */
+    { &vop_lock_desc, (void *)coda_lock },             /* lock */
+    { &vop_unlock_desc, (void *)coda_unlock },         /* unlock */
+    { &vop_bmap_desc, (void *)coda_bmap },             /* bmap */
+    { &vop_strategy_desc, (void *)coda_strategy },     /* strategy */
+    { &vop_print_desc, (void *)coda_vop_error },       /* print */
+    { &vop_islocked_desc, (void *)coda_islocked },     /* islocked */
+    { &vop_pathconf_desc, (void *)coda_vop_error },    /* pathconf */
+    { &vop_advlock_desc, (void *)coda_vop_nop },       /* advlock */
+    { &vop_bwrite_desc, (void *)coda_vop_error },      /* bwrite */
+    { &vop_lease_desc, (void *)coda_vop_nop },         /* lease */
+    { &vop_poll_desc, (void *) vop_stdpoll },          /* poll */
+    { &vop_getpages_desc, (void *)coda_fbsd_getpages },        /* pager intf.*/
+    { &vop_putpages_desc, (void *)coda_fbsd_putpages },        /* pager intf.*/
+    { &vop_createvobject_desc,      (void *) vop_stdcreatevobject },
+    { &vop_destroyvobject_desc,     (void *) vop_stddestroyvobject },
+    { &vop_getvobject_desc,         (void *) vop_stdgetvobject },
 
 #if    0
 
@@ -163,15 +163,15 @@ struct vnodeopv_entry_desc coda_vnodeop_entries[] = {
 #define UFS_UPDATE(aa, bb) VFSTOUFS((aa)->v_mount)->um_update(aa, bb)
 
     missing
-    { &vop_reallocblks_desc,   (vop_t *) ufs_missingop },
-    { &vop_cachedlookup_desc,  (vop_t *) ufs_lookup },
-    { &vop_whiteout_desc,      (vop_t *) ufs_whiteout },
+    { &vop_reallocblks_desc,   (void *) ufs_missingop },
+    { &vop_cachedlookup_desc,  (void *) ufs_lookup },
+    { &vop_whiteout_desc,      (void *) ufs_whiteout },
 #endif
-    { (struct vnodeop_desc*)NULL, (int(*)(void *))NULL }
+    { NULL, NULL }
 };
 
 static struct vnodeopv_desc coda_vnodeop_opv_desc =
-               { &coda_vnodeop_p, coda_vnodeop_entries };
+               { &coda_vnode_vops, coda_vnodeop_entries };
 
 VNODEOP_SET(coda_vnodeop_opv_desc);
 
@@ -557,7 +557,7 @@ coda_ioctl(void *v)
      * Make sure this is a coda style cnode, but it may be a
      * different vfsp 
      */
-    if (tvp->v_op != coda_vnodeop_p) {
+    if (tvp->v_vops != coda_vnode_vops) {
        vrele(tvp);
        NDFREE(&ndp, NDF_ONLY_PNBUF);
        MARK_INT_FAIL(CODA_IOCTL_STATS);
@@ -1908,7 +1908,7 @@ make_coda_node(ViceFid *fid, struct mount *vfsp, short type)
        lockinit(&cp->c_lock, 0, "cnode", 0, 0);
        cp->c_fid = *fid;
        
-       err = getnewvnode(VT_CODA, vfsp, coda_vnodeop_p, &vp);  
+       err = getnewvnode(VT_CODA, vfsp, coda_vnode_vops, &vp);  
        if (err) {                                                
            panic("coda: getnewvnode returned error %d\n", err);   
        }                                                         
index 79707f9..f6a40d2 100644 (file)
@@ -28,7 +28,7 @@
  * 
  *     @(#) src/sys/coda/coda_vnops.h,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
  * $FreeBSD: src/sys/coda/coda_vnops.h,v 1.6 1999/08/28 00:40:58 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_vnops.h,v 1.5 2004/02/16 19:56:26 dillon Exp $
+ * $DragonFly: src/sys/vfs/coda/Attic/coda_vnops.h,v 1.6 2004/08/13 17:51:10 dillon Exp $
  * 
   */
 
@@ -81,7 +81,7 @@ int coda_vop_nop   (void *);
 int coda_fbsd_getpages (void *);
 int coda_fbsd_putpages (void *);
 
-extern int (**coda_vnodeop_p)(void *);
+extern struct vop_ops *coda_vnode_vops;
 
 int coda_rdwr(struct vnode *vp, struct uio *uiop, enum uio_rw rw,
     int ioflag, struct ucred *cred, struct thread *p);
index 7b62c79..7459c84 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)dead_vnops.c        8.1 (Berkeley) 6/10/93
  * $FreeBSD: src/sys/miscfs/deadfs/dead_vnops.c,v 1.26 1999/08/28 00:46:42 peter Exp $
- * $DragonFly: src/sys/vfs/deadfs/dead_vnops.c,v 1.8 2004/03/31 23:13:43 cpressey Exp $
+ * $DragonFly: src/sys/vfs/deadfs/dead_vnops.c,v 1.9 2004/08/13 17:51:10 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -58,40 +58,40 @@ static int  dead_print (struct vop_print_args *);
 static int     dead_read (struct vop_read_args *);
 static int     dead_write (struct vop_write_args *);
 
-vop_t **dead_vnodeop_p;
+struct vop_ops *dead_vnode_vops;
 static struct vnodeopv_entry_desc dead_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) vop_defaultop },
-       { &vop_access_desc,             (vop_t *) vop_ebadf },
-       { &vop_advlock_desc,            (vop_t *) vop_ebadf },
-       { &vop_bmap_desc,               (vop_t *) dead_bmap },
-       { &vop_create_desc,             (vop_t *) dead_badop },
-       { &vop_getattr_desc,            (vop_t *) vop_ebadf },
-       { &vop_inactive_desc,           (vop_t *) vop_null },
-       { &vop_ioctl_desc,              (vop_t *) dead_ioctl },
-       { &vop_link_desc,               (vop_t *) dead_badop },
-       { &vop_lock_desc,               (vop_t *) dead_lock },
-       { &vop_lookup_desc,             (vop_t *) dead_lookup },
-       { &vop_mkdir_desc,              (vop_t *) dead_badop },
-       { &vop_mknod_desc,              (vop_t *) dead_badop },
-       { &vop_mmap_desc,               (vop_t *) dead_badop },
-       { &vop_open_desc,               (vop_t *) dead_open },
-       { &vop_pathconf_desc,           (vop_t *) vop_ebadf },  /* per pathconf(2) */
-       { &vop_poll_desc,               (vop_t *) dead_poll },
-       { &vop_print_desc,              (vop_t *) dead_print },
-       { &vop_read_desc,               (vop_t *) dead_read },
-       { &vop_readdir_desc,            (vop_t *) vop_ebadf },
-       { &vop_readlink_desc,           (vop_t *) vop_ebadf },
-       { &vop_reclaim_desc,            (vop_t *) vop_null },
-       { &vop_remove_desc,             (vop_t *) dead_badop },
-       { &vop_rename_desc,             (vop_t *) dead_badop },
-       { &vop_rmdir_desc,              (vop_t *) dead_badop },
-       { &vop_setattr_desc,            (vop_t *) vop_ebadf },
-       { &vop_symlink_desc,            (vop_t *) dead_badop },
-       { &vop_write_desc,              (vop_t *) dead_write },
+       { &vop_default_desc,            vop_defaultop },
+       { &vop_access_desc,             vop_ebadf },
+       { &vop_advlock_desc,            vop_ebadf },
+       { &vop_bmap_desc,               (void *) dead_bmap },
+       { &vop_create_desc,             (void *) dead_badop },
+       { &vop_getattr_desc,            vop_ebadf },
+       { &vop_inactive_desc,           vop_null },
+       { &vop_ioctl_desc,              (void *) dead_ioctl },
+       { &vop_link_desc,               (void *) dead_badop },
+       { &vop_lock_desc,               (void *) dead_lock },
+       { &vop_lookup_desc,             (void *) dead_lookup },
+       { &vop_mkdir_desc,              (void *) dead_badop },
+       { &vop_mknod_desc,              (void *) dead_badop },
+       { &vop_mmap_desc,               (void *) dead_badop },
+       { &vop_open_desc,               (void *) dead_open },
+       { &vop_pathconf_desc,           vop_ebadf },    /* per pathconf(2) */
+       { &vop_poll_desc,               (void *) dead_poll },
+       { &vop_print_desc,              (void *) dead_print },
+       { &vop_read_desc,               (void *) dead_read },
+       { &vop_readdir_desc,            vop_ebadf },
+       { &vop_readlink_desc,           vop_ebadf },
+       { &vop_reclaim_desc,            vop_null },
+       { &vop_remove_desc,             (void *) dead_badop },
+       { &vop_rename_desc,             (void *) dead_badop },
+       { &vop_rmdir_desc,              (void *) dead_badop },
+       { &vop_setattr_desc,            vop_ebadf },
+       { &vop_symlink_desc,            (void *) dead_badop },
+       { &vop_write_desc,              (void *) dead_write },
        { NULL, NULL }
 };
 static struct vnodeopv_desc dead_vnodeop_opv_desc =
-       { &dead_vnodeop_p, dead_vnodeop_entries };
+       { &dead_vnode_vops, dead_vnodeop_entries };
 
 VNODEOP_SET(dead_vnodeop_opv_desc);
 
@@ -169,7 +169,7 @@ dead_ioctl(struct vop_ioctl_args *ap)
 {
        if (!chkvnlock(ap->a_vp))
                return (ENOTTY);
-       return (VCALL(ap->a_vp, VOFFSET(vop_ioctl), ap));
+       return (VCALL(ap->a_vp, VOFFSET(vop_ioctl), &ap->a_head));
 }
 
 /*
@@ -193,7 +193,7 @@ dead_lock(struct vop_lock_args *ap)
        }
        if (!chkvnlock(vp))
                return (0);
-       return (VCALL(vp, VOFFSET(vop_lock), ap));
+       return (VCALL(vp, VOFFSET(vop_lock), &ap->a_head));
 }
 
 /*
index b349f62..cd8b1c4 100644 (file)
@@ -1,9 +1,8 @@
 # $FreeBSD: src/sys/modules/fdesc/Makefile,v 1.6 1999/12/12 16:47:24 peter Exp $
-# $DragonFly: src/sys/vfs/fdesc/Makefile,v 1.3 2003/08/15 07:26:14 dillon Exp $
+# $DragonFly: src/sys/vfs/fdesc/Makefile,v 1.4 2004/08/13 17:51:10 dillon Exp $
 
 KMOD=  fdesc
-SRCS=  vnode_if.h \
-       fdesc_vfsops.c fdesc_vnops.c
+SRCS=  fdesc_vfsops.c fdesc_vnops.c
 NOMAN=
 CFLAGS+= -DFDESC
 
index 5bc0834..385823e 100644 (file)
@@ -36,7 +36,7 @@
  *     @(#)fdesc_vnops.c       8.9 (Berkeley) 1/21/94
  *
  * $FreeBSD: src/sys/miscfs/fdesc/fdesc_vnops.c,v 1.47.2.1 2001/10/22 22:49:26 chris Exp $
- * $DragonFly: src/sys/vfs/fdesc/fdesc_vnops.c,v 1.11 2004/04/24 04:32:03 drhodus Exp $
+ * $DragonFly: src/sys/vfs/fdesc/fdesc_vnops.c,v 1.12 2004/08/13 17:51:10 dillon Exp $
  */
 
 /*
@@ -66,7 +66,7 @@
 #define FDL_LOCKED     0x02
 static int fdcache_lock;
 
-static vop_t **fdesc_vnodeop_p;
+static struct vop_ops *fdesc_vnode_vops;
 
 #define        NFDCACHE 4
 #define FD_NHASH(ix) \
@@ -132,7 +132,7 @@ loop:
         */
        MALLOC(fd, struct fdescnode *, sizeof(struct fdescnode), M_TEMP, M_WAITOK);
 
-       error = getnewvnode(VT_FDESC, mp, fdesc_vnodeop_p, vpp);
+       error = getnewvnode(VT_FDESC, mp, fdesc_vnode_vops, vpp);
        if (error) {
                FREE(fd, M_TEMP);
                goto out;
@@ -529,21 +529,21 @@ fdesc_print(struct vop_print_args *ap)
 }
 
 static struct vnodeopv_entry_desc fdesc_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) vop_defaultop },
-       { &vop_access_desc,             (vop_t *) vop_null },
-       { &vop_getattr_desc,            (vop_t *) fdesc_getattr },
-       { &vop_inactive_desc,           (vop_t *) fdesc_inactive },
-       { &vop_lookup_desc,             (vop_t *) fdesc_lookup },
-       { &vop_open_desc,               (vop_t *) fdesc_open },
-       { &vop_pathconf_desc,           (vop_t *) vop_stdpathconf },
-       { &vop_poll_desc,               (vop_t *) fdesc_poll },
-       { &vop_print_desc,              (vop_t *) fdesc_print },
-       { &vop_readdir_desc,            (vop_t *) fdesc_readdir },
-       { &vop_reclaim_desc,            (vop_t *) fdesc_reclaim },
-       { &vop_setattr_desc,            (vop_t *) fdesc_setattr },
+       { &vop_default_desc,            (void *) vop_defaultop },
+       { &vop_access_desc,             (void *) vop_null },
+       { &vop_getattr_desc,            (void *) fdesc_getattr },
+       { &vop_inactive_desc,           (void *) fdesc_inactive },
+       { &vop_lookup_desc,             (void *) fdesc_lookup },
+       { &vop_open_desc,               (void *) fdesc_open },
+       { &vop_pathconf_desc,           (void *) vop_stdpathconf },
+       { &vop_poll_desc,               (void *) fdesc_poll },
+       { &vop_print_desc,              (void *) fdesc_print },
+       { &vop_readdir_desc,            (void *) fdesc_readdir },
+       { &vop_reclaim_desc,            (void *) fdesc_reclaim },
+       { &vop_setattr_desc,            (void *) fdesc_setattr },
        { NULL, NULL }
 };
 static struct vnodeopv_desc fdesc_vnodeop_opv_desc =
-       { &fdesc_vnodeop_p, fdesc_vnodeop_entries };
+       { &fdesc_vnode_vops, fdesc_vnodeop_entries };
 
 VNODEOP_SET(fdesc_vnodeop_opv_desc);
index 5c62b30..d509725 100644 (file)
@@ -1,8 +1,8 @@
 # $FreeBSD: src/sys/modules/nullfs/Makefile,v 1.10 1999/12/12 16:47:29 peter Exp $
-# $DragonFly: src/sys/vfs/fifofs/Makefile,v 1.1 2003/08/15 07:26:14 dillon Exp $
+# $DragonFly: src/sys/vfs/fifofs/Makefile,v 1.2 2004/08/13 17:51:10 dillon Exp $
 
 KMOD=  fifo
-SRCS=  vnode_if.h fifo_vnops.c
+SRCS=  fifo_vnops.c
 NOMAN=
 
 .include <bsd.kmod.mk>
index fb69db0..1eb0bf4 100644 (file)
  *
  *     @(#)fifo.h      8.6 (Berkeley) 5/21/95
  * $FreeBSD: src/sys/miscfs/fifofs/fifo.h,v 1.16 1999/08/28 00:46:46 peter Exp $
- * $DragonFly: src/sys/vfs/fifofs/fifo.h,v 1.3 2003/08/20 09:56:31 rob Exp $
+ * $DragonFly: src/sys/vfs/fifofs/fifo.h,v 1.4 2004/08/13 17:51:10 dillon Exp $
  */
 
-extern vop_t **fifo_vnodeop_p;
+extern struct vop_ops *fifo_vnode_vops;
 
 /*
  * Prototypes for fifo operations on vnodes.
index fff4b96..5316ebb 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)fifo_vnops.c        8.10 (Berkeley) 5/27/95
  * $FreeBSD: src/sys/miscfs/fifofs/fifo_vnops.c,v 1.45.2.4 2003/04/22 10:11:24 bde Exp $
- * $DragonFly: src/sys/vfs/fifofs/fifo_vnops.c,v 1.14 2004/04/06 21:32:39 cpressey Exp $
+ * $DragonFly: src/sys/vfs/fifofs/fifo_vnops.c,v 1.15 2004/08/13 17:51:10 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -88,42 +88,42 @@ static struct filterops fiforead_filtops =
 static struct filterops fifowrite_filtops =
        { 1, NULL, filt_fifowdetach, filt_fifowrite };
   
-vop_t **fifo_vnodeop_p;
+struct vop_ops *fifo_vnode_vops;
 static struct vnodeopv_entry_desc fifo_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) vop_defaultop },
-       { &vop_access_desc,             (vop_t *) vop_ebadf },
-       { &vop_advlock_desc,            (vop_t *) fifo_advlock },
-       { &vop_bmap_desc,               (vop_t *) fifo_bmap },
-       { &vop_close_desc,              (vop_t *) fifo_close },
-       { &vop_create_desc,             (vop_t *) fifo_badop },
-       { &vop_getattr_desc,            (vop_t *) vop_ebadf },
-       { &vop_inactive_desc,           (vop_t *) fifo_inactive },
-       { &vop_ioctl_desc,              (vop_t *) fifo_ioctl },
-       { &vop_kqfilter_desc,           (vop_t *) fifo_kqfilter },
-       { &vop_lease_desc,              (vop_t *) vop_null },
-       { &vop_link_desc,               (vop_t *) fifo_badop },
-       { &vop_lookup_desc,             (vop_t *) fifo_lookup },
-       { &vop_mkdir_desc,              (vop_t *) fifo_badop },
-       { &vop_mknod_desc,              (vop_t *) fifo_badop },
-       { &vop_open_desc,               (vop_t *) fifo_open },
-       { &vop_pathconf_desc,           (vop_t *) fifo_pathconf },
-       { &vop_poll_desc,               (vop_t *) fifo_poll },
-       { &vop_print_desc,              (vop_t *) fifo_print },
-       { &vop_read_desc,               (vop_t *) fifo_read },
-       { &vop_readdir_desc,            (vop_t *) fifo_badop },
-       { &vop_readlink_desc,           (vop_t *) fifo_badop },
-       { &vop_reallocblks_desc,        (vop_t *) fifo_badop },
-       { &vop_reclaim_desc,            (vop_t *) vop_null },
-       { &vop_remove_desc,             (vop_t *) fifo_badop },
-       { &vop_rename_desc,             (vop_t *) fifo_badop },
-       { &vop_rmdir_desc,              (vop_t *) fifo_badop },
-       { &vop_setattr_desc,            (vop_t *) vop_ebadf },
-       { &vop_symlink_desc,            (vop_t *) fifo_badop },
-       { &vop_write_desc,              (vop_t *) fifo_write },
+       { &vop_default_desc,            (void *) vop_defaultop },
+       { &vop_access_desc,             (void *) vop_ebadf },
+       { &vop_advlock_desc,            (void *) fifo_advlock },
+       { &vop_bmap_desc,               (void *) fifo_bmap },
+       { &vop_close_desc,              (void *) fifo_close },
+       { &vop_create_desc,             (void *) fifo_badop },
+       { &vop_getattr_desc,            (void *) vop_ebadf },
+       { &vop_inactive_desc,           (void *) fifo_inactive },
+       { &vop_ioctl_desc,              (void *) fifo_ioctl },
+       { &vop_kqfilter_desc,           (void *) fifo_kqfilter },
+       { &vop_lease_desc,              (void *) vop_null },
+       { &vop_link_desc,               (void *) fifo_badop },
+       { &vop_lookup_desc,             (void *) fifo_lookup },
+       { &vop_mkdir_desc,              (void *) fifo_badop },
+       { &vop_mknod_desc,              (void *) fifo_badop },
+       { &vop_open_desc,               (void *) fifo_open },
+       { &vop_pathconf_desc,           (void *) fifo_pathconf },
+       { &vop_poll_desc,               (void *) fifo_poll },
+       { &vop_print_desc,              (void *) fifo_print },
+       { &vop_read_desc,               (void *) fifo_read },
+       { &vop_readdir_desc,            (void *) fifo_badop },
+       { &vop_readlink_desc,           (void *) fifo_badop },
+       { &vop_reallocblks_desc,        (void *) fifo_badop },
+       { &vop_reclaim_desc,            (void *) vop_null },
+       { &vop_remove_desc,             (void *) fifo_badop },
+       { &vop_rename_desc,             (void *) fifo_badop },
+       { &vop_rmdir_desc,              (void *) fifo_badop },
+       { &vop_setattr_desc,            (void *) vop_ebadf },
+       { &vop_symlink_desc,            (void *) fifo_badop },
+       { &vop_write_desc,              (void *) fifo_write },
        { NULL, NULL }
 };
 static struct vnodeopv_desc fifo_vnodeop_opv_desc =
-       { &fifo_vnodeop_p, fifo_vnodeop_entries };
+       { &fifo_vnode_vops, fifo_vnodeop_entries };
 
 VNODEOP_SET(fifo_vnodeop_opv_desc);
 
@@ -133,7 +133,7 @@ VNODEOP_SET(fifo_vnodeop_opv_desc);
 int
 fifo_vnoperate(struct vop_generic_args *ap)
 {
-       return (VOCALL(fifo_vnodeop_p, ap->a_desc->vdesc_offset, ap));
+       return (VOCALL(fifo_vnode_vops, ap->a_desc->vdesc_offset, ap));
 }
 
 /*
index 2ef98c2..824c121 100644 (file)
@@ -1,9 +1,9 @@
 # $FreeBSD: src/sys/modules/ext2fs/Makefile,v 1.4.2.1 2002/08/06 14:14:25 mdodd Exp $
-# $DragonFly: src/sys/vfs/gnu/ext2fs/Makefile,v 1.2 2003/06/17 04:28:43 dillon Exp $
+# $DragonFly: src/sys/vfs/gnu/ext2fs/Makefile,v 1.3 2004/08/13 17:51:10 dillon Exp $
 
 .PATH: ${.CURDIR}/../../gnu/ext2fs
 KMOD=  ext2fs
-SRCS=  opt_ddb.h opt_quota.h opt_suiddir.h vnode_if.h \
+SRCS=  opt_ddb.h opt_quota.h opt_suiddir.h \
        ext2_alloc.c ext2_balloc.c ext2_inode.c ext2_inode_cnv.c \
        ext2_linux_balloc.c ext2_linux_ialloc.c ext2_lookup.c \
        ext2_subr.c ext2_vfsops.c ext2_vnops.c
index 57f7254..e8d9b11 100644 (file)
@@ -38,7 +38,7 @@
  *
  *     @(#)ffs_extern.h        8.3 (Berkeley) 4/16/94
  * $FreeBSD: src/sys/gnu/ext2fs/ext2_extern.h,v 1.22.6.1 2000/11/05 19:17:40 bde Exp $
- * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_extern.h,v 1.4 2003/08/20 09:56:31 rob Exp $
+ * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_extern.h,v 1.5 2004/08/13 17:51:10 dillon Exp $
  */
 
 #ifndef _SYS_GNU_EXT2FS_EXT2_EXTERN_H_
@@ -101,8 +101,8 @@ void        mark_buffer_dirty (struct buf *bh);
  */
 #define  IS_EXT2_VNODE(vp) (vp->v_mount->mnt_stat.f_type == MOUNT_EXT2FS)
 
-extern vop_t **ext2_vnodeop_p;
-extern vop_t **ext2_specop_p;
-extern vop_t **ext2_fifoop_p;
+extern struct vop_ops *ext2_vnode_vops;
+extern struct vop_ops *ext2_spec_vops;
+extern struct vop_ops *ext2_fifo_vops;
 
 #endif /* !_SYS_GNU_EXT2FS_EXT2_EXTERN_H_ */
index 072a248..0475bc5 100644 (file)
@@ -38,7 +38,7 @@
  *
  *     @(#)ffs_vfsops.c        8.8 (Berkeley) 4/18/94
  *     $FreeBSD: src/sys/gnu/ext2fs/ext2_vfsops.c,v 1.63.2.7 2002/07/01 00:18:51 iedowse Exp $
- *     $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vfsops.c,v 1.16 2004/05/26 07:45:21 dillon Exp $
+ *     $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vfsops.c,v 1.17 2004/08/13 17:51:10 dillon Exp $
  */
 
 #include "opt_quota.h"
@@ -1044,7 +1044,7 @@ restart:
        MALLOC(ip, struct inode *, sizeof(struct inode), M_EXT2NODE, M_WAITOK);
 
        /* Allocate a new vnode/inode. */
-       if ((error = getnewvnode(VT_UFS, mp, ext2_vnodeop_p, &vp)) != 0) {
+       if ((error = getnewvnode(VT_UFS, mp, ext2_vnode_vops, &vp)) != 0) {
                if (ext2fs_inode_hash_lock < 0)
                        wakeup(&ext2fs_inode_hash_lock);
                ext2fs_inode_hash_lock = 0;
@@ -1118,7 +1118,7 @@ printf("ext2_vget(%d) dbn= %d ", ino, fsbtodb(fs, ino_to_fsba(fs, ino)));
         * Initialize the vnode from the inode, check for aliases.
         * Note that the underlying vnode may have changed.
         */
-       if ((error = ufs_vinit(mp, ext2_specop_p, ext2_fifoop_p, &vp)) != 0) {
+       if ((error = ufs_vinit(mp, ext2_spec_vops, ext2_fifo_vops, &vp)) != 0) {
                vput(vp);
                *vpp = NULL;
                return (error);
index 32cc60b..d9f6e0b 100644 (file)
@@ -44,7 +44,7 @@
  *     @(#)ufs_vnops.c 8.27 (Berkeley) 5/27/95
  *     @(#)ext2_vnops.c        8.7 (Berkeley) 2/3/94
  * $FreeBSD: src/sys/gnu/ext2fs/ext2_vnops.c,v 1.51.2.2 2003/01/02 17:26:18 bde Exp $
- * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vnops.c,v 1.13 2004/07/02 15:43:10 joerg Exp $
+ * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vnops.c,v 1.14 2004/08/13 17:51:10 dillon Exp $
  */
 
 #include "opt_quota.h"
@@ -97,51 +97,51 @@ static int ext2_getpages (struct vop_getpages_args *);
 static int ext2_putpages (struct vop_putpages_args *);
 
 /* Global vfs data structures for ufs. */
-vop_t **ext2_vnodeop_p;
+struct vop_ops *ext2_vnode_vops;
 static struct vnodeopv_entry_desc ext2_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) ufs_vnoperate },
-       { &vop_cachedlookup_desc,       (vop_t *) ext2_lookup },
-       { &vop_fsync_desc,              (vop_t *) ext2_fsync },
-       { &vop_inactive_desc,           (vop_t *) ext2_inactive },
-       { &vop_lookup_desc,             (vop_t *) vfs_cache_lookup },
-       { &vop_read_desc,               (vop_t *) ext2_read },
-       { &vop_readdir_desc,            (vop_t *) ext2_readdir },
-       { &vop_reallocblks_desc,        (vop_t *) ext2_reallocblks },
-       { &vop_write_desc,              (vop_t *) ext2_write },
-       { &vop_remove_desc,             (vop_t *) ext2_remove },
-       { &vop_link_desc,               (vop_t *) ext2_link },
-       { &vop_rename_desc,             (vop_t *) ext2_rename },
-       { &vop_mkdir_desc,              (vop_t *) ext2_mkdir },
-       { &vop_rmdir_desc,              (vop_t *) ext2_rmdir },
-       { &vop_create_desc,             (vop_t *) ext2_create },
-       { &vop_mknod_desc,              (vop_t *) ext2_mknod },
-       { &vop_symlink_desc,            (vop_t *) ext2_symlink },
-       { &vop_getpages_desc,           (vop_t *) ext2_getpages },
-       { &vop_putpages_desc,           (vop_t *) ext2_putpages },
+       { &vop_default_desc,            (void *) ufs_vnoperate },
+       { &vop_cachedlookup_desc,       (void *) ext2_lookup },
+       { &vop_fsync_desc,              (void *) ext2_fsync },
+       { &vop_inactive_desc,           (void *) ext2_inactive },
+       { &vop_lookup_desc,             (void *) vfs_cache_lookup },
+       { &vop_read_desc,               (void *) ext2_read },
+       { &vop_readdir_desc,            (void *) ext2_readdir },
+       { &vop_reallocblks_desc,        (void *) ext2_reallocblks },
+       { &vop_write_desc,              (void *) ext2_write },
+       { &vop_remove_desc,             (void *) ext2_remove },
+       { &vop_link_desc,               (void *) ext2_link },
+       { &vop_rename_desc,             (void *) ext2_rename },
+       { &vop_mkdir_desc,              (void *) ext2_mkdir },
+       { &vop_rmdir_desc,              (void *) ext2_rmdir },
+       { &vop_create_desc,             (void *) ext2_create },
+       { &vop_mknod_desc,              (void *) ext2_mknod },
+       { &vop_symlink_desc,            (void *) ext2_symlink },
+       { &vop_getpages_desc,           (void *) ext2_getpages },
+       { &vop_putpages_desc,           (void *) ext2_putpages },
        { NULL, NULL }
 };
 static struct vnodeopv_desc ext2fs_vnodeop_opv_desc =
-       { &ext2_vnodeop_p, ext2_vnodeop_entries };
+       { &ext2_vnode_vops, ext2_vnodeop_entries };
 
-vop_t **ext2_specop_p;
+struct vop_ops *ext2_spec_vops;
 static struct vnodeopv_entry_desc ext2_specop_entries[] = {
-       { &vop_default_desc,            (vop_t *) ufs_vnoperatespec },
-       { &vop_fsync_desc,              (vop_t *) ext2_fsync },
-       { &vop_inactive_desc,           (vop_t *) ext2_inactive },
+       { &vop_default_desc,            (void *) ufs_vnoperatespec },
+       { &vop_fsync_desc,              (void *) ext2_fsync },
+       { &vop_inactive_desc,           (void *) ext2_inactive },
        { NULL, NULL }
 };
 static struct vnodeopv_desc ext2fs_specop_opv_desc =
-       { &ext2_specop_p, ext2_specop_entries };
+       { &ext2_spec_vops, ext2_specop_entries };
 
-vop_t **ext2_fifoop_p;
+struct vop_ops *ext2_fifo_vops;
 static struct vnodeopv_entry_desc ext2_fifoop_entries[] = {
-       { &vop_default_desc,            (vop_t *) ufs_vnoperatefifo },
-       { &vop_fsync_desc,              (vop_t *) ext2_fsync },
-       { &vop_inactive_desc,           (vop_t *) ext2_inactive },
+       { &vop_default_desc,            (void *) ufs_vnoperatefifo },
+       { &vop_fsync_desc,              (void *) ext2_fsync },
+       { &vop_inactive_desc,           (void *) ext2_inactive },
        { NULL, NULL }
 };
 static struct vnodeopv_desc ext2fs_fifoop_opv_desc =
-       { &ext2_fifoop_p, ext2_fifoop_entries };
+       { &ext2_fifo_vops, ext2_fifoop_entries };
 
        VNODEOP_SET(ext2fs_vnodeop_opv_desc);
        VNODEOP_SET(ext2fs_specop_opv_desc);
index 7a0ac74..f6182d0 100644 (file)
@@ -1,9 +1,8 @@
 # $FreeBSD: src/sys/modules/hpfs/Makefile,v 1.3 1999/12/12 20:34:02 peter Exp $
-# $DragonFly: src/sys/vfs/hpfs/Makefile,v 1.3 2003/08/15 07:26:15 dillon Exp $
+# $DragonFly: src/sys/vfs/hpfs/Makefile,v 1.4 2004/08/13 17:51:11 dillon Exp $
 
 KMOD=  hpfs
-SRCS=  vnode_if.h \
-       hpfs_vfsops.c hpfs_vnops.c hpfs_hash.c hpfs_subr.c hpfs_lookup.c \
+SRCS=  hpfs_vfsops.c hpfs_vnops.c hpfs_hash.c hpfs_subr.c hpfs_lookup.c \
        hpfs_alsubr.c
 NOMAN=
 
index 73052bc..98d86fb 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/fs/hpfs/hpfs.h,v 1.1 1999/12/09 19:09:58 semenu Exp $
- * $DragonFly: src/sys/vfs/hpfs/hpfs.h,v 1.10 2004/03/01 06:33:20 dillon Exp $
+ * $DragonFly: src/sys/vfs/hpfs/hpfs.h,v 1.11 2004/08/13 17:51:11 dillon Exp $
  */
 
 /*#define HPFS_DEBUG 10*/
@@ -406,7 +406,7 @@ typedef int (vop_t) (void *);
 #define        LOCKMGR(a, b, c, d)     lockmgr((a), (b), (c), (d))
 #endif
 
-extern vop_t ** hpfs_vnodeop_p;
+extern struct vop_ops *hpfs_vnode_vops;
 struct vfsconf;
 
 /* Hash routines, too small to be separate header */
index 3d7290b..96f9a73 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/fs/hpfs/hpfs_vfsops.c,v 1.3.2.2 2001/12/25 01:44:45 dillon Exp $
- * $DragonFly: src/sys/vfs/hpfs/hpfs_vfsops.c,v 1.17 2004/05/26 07:45:22 dillon Exp $
+ * $DragonFly: src/sys/vfs/hpfs/hpfs_vfsops.c,v 1.18 2004/08/13 17:51:11 dillon Exp $
  */
 
 
@@ -610,7 +610,7 @@ hpfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp)
        MALLOC(hp, struct hpfsnode *, sizeof(struct hpfsnode), 
                M_HPFSNO, M_WAITOK);
 
-       error = getnewvnode(VT_HPFS, hpmp->hpm_mp, hpfs_vnodeop_p, &vp);
+       error = getnewvnode(VT_HPFS, hpmp->hpm_mp, hpfs_vnode_vops, &vp);
        if (error) {
                printf("hpfs_vget: can't get new vnode\n");
                FREE(hp, M_HPFSNO);
index b673aa7..ac79e0b 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/fs/hpfs/hpfs_vnops.c,v 1.2.2.2 2002/01/15 18:35:09 semenu Exp $
- * $DragonFly: src/sys/vfs/hpfs/hpfs_vnops.c,v 1.14 2004/04/24 04:32:04 drhodus Exp $
+ * $DragonFly: src/sys/vfs/hpfs/hpfs_vnops.c,v 1.15 2004/08/13 17:51:11 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -1309,58 +1309,58 @@ hpfs_pathconf(struct vop_pathconf_args *ap)
 /*
  * Global vfs data structures
  */
-vop_t **hpfs_vnodeop_p;
+struct vop_ops *hpfs_vnode_vops;
 #if defined(__DragonFly__)
 struct vnodeopv_entry_desc hpfs_vnodeop_entries[] = {
-       { &vop_default_desc, (vop_t *)vop_defaultop },
-
-       { &vop_getattr_desc, (vop_t *)hpfs_getattr },
-       { &vop_setattr_desc, (vop_t *)hpfs_setattr },
-       { &vop_inactive_desc, (vop_t *)hpfs_inactive },
-       { &vop_reclaim_desc, (vop_t *)hpfs_reclaim },
-       { &vop_print_desc, (vop_t *)hpfs_print },
-       { &vop_create_desc, (vop_t *)hpfs_create },
-       { &vop_remove_desc, (vop_t *)hpfs_remove },
-       { &vop_islocked_desc, (vop_t *)vop_stdislocked },
-       { &vop_unlock_desc, (vop_t *)vop_stdunlock },
-       { &vop_lock_desc, (vop_t *)vop_stdlock },
-       { &vop_cachedlookup_desc, (vop_t *)hpfs_lookup },
-       { &vop_lookup_desc, (vop_t *)vfs_cache_lookup },
-       { &vop_access_desc, (vop_t *)hpfs_access },
-       { &vop_close_desc, (vop_t *)hpfs_close },
-       { &vop_open_desc, (vop_t *)hpfs_open },
-       { &vop_readdir_desc, (vop_t *)hpfs_readdir },
-       { &vop_fsync_desc, (vop_t *)hpfs_fsync },
-       { &vop_bmap_desc, (vop_t *)hpfs_bmap },
-       { &vop_getpages_desc, (vop_t *) hpfs_getpages },
-       { &vop_putpages_desc, (vop_t *) hpfs_putpages },
-       { &vop_strategy_desc, (vop_t *)hpfs_strategy },
-       { &vop_bwrite_desc, (vop_t *)vop_stdbwrite },
-       { &vop_read_desc, (vop_t *)hpfs_read },
-       { &vop_write_desc, (vop_t *)hpfs_write },
-       { &vop_ioctl_desc, (vop_t *)hpfs_ioctl },
-       { &vop_pathconf_desc, (vop_t *)hpfs_pathconf },
+       { &vop_default_desc, (void *)vop_defaultop },
+
+       { &vop_getattr_desc, (void *)hpfs_getattr },
+       { &vop_setattr_desc, (void *)hpfs_setattr },
+       { &vop_inactive_desc, (void *)hpfs_inactive },
+       { &vop_reclaim_desc, (void *)hpfs_reclaim },
+       { &vop_print_desc, (void *)hpfs_print },
+       { &vop_create_desc, (void *)hpfs_create },
+       { &vop_remove_desc, (void *)hpfs_remove },
+       { &vop_islocked_desc, (void *)vop_stdislocked },
+       { &vop_unlock_desc, (void *)vop_stdunlock },
+       { &vop_lock_desc, (void *)vop_stdlock },
+       { &vop_cachedlookup_desc, (void *)hpfs_lookup },
+       { &vop_lookup_desc, (void *)vfs_cache_lookup },
+       { &vop_access_desc, (void *)hpfs_access },
+       { &vop_close_desc, (void *)hpfs_close },
+       { &vop_open_desc, (void *)hpfs_open },
+       { &vop_readdir_desc, (void *)hpfs_readdir },
+       { &vop_fsync_desc, (void *)hpfs_fsync },
+       { &vop_bmap_desc, (void *)hpfs_bmap },
+       { &vop_getpages_desc, (void *) hpfs_getpages },
+       { &vop_putpages_desc, (void *) hpfs_putpages },
+       { &vop_strategy_desc, (void *)hpfs_strategy },
+       { &vop_bwrite_desc, (void *)vop_stdbwrite },
+       { &vop_read_desc, (void *)hpfs_read },
+       { &vop_write_desc, (void *)hpfs_write },
+       { &vop_ioctl_desc, (void *)hpfs_ioctl },
+       { &vop_pathconf_desc, (void *)hpfs_pathconf },
        { NULL, NULL }
 };
 
 static
 struct vnodeopv_desc hpfs_vnodeop_opv_desc =
-       { &hpfs_vnodeop_p, hpfs_vnodeop_entries };
+       { &hpfs_vnode_vops, hpfs_vnodeop_entries };
 
 VNODEOP_SET(hpfs_vnodeop_opv_desc);
 #else /* defined(__NetBSD__) */
 struct vnodeopv_entry_desc ntfs_vnodeop_entries[] = {
-       { &vop_default_desc, (vop_t *) genfs_badop },   /* XXX */
-       { &vop_lookup_desc, (vop_t *) hpfs_lookup },    /* lookup */
+       { &vop_default_desc, (void *) genfs_badop },    /* XXX */
+       { &vop_lookup_desc, (void *) hpfs_lookup },     /* lookup */
        { &vop_create_desc, genfs_eopnotsupp },         /* create */
        { &vop_mknod_desc, genfs_eopnotsupp },          /* mknod */
-       { &vop_open_desc, (vop_t *) hpfs_open },        /* open */
-       { &vop_close_desc,(vop_t *) hpfs_close },       /* close */
-       { &vop_access_desc, (vop_t *) hpfs_access },    /* access */
-       { &vop_getattr_desc, (vop_t *) hpfs_getattr },  /* getattr */
+       { &vop_open_desc, (void *) hpfs_open }, /* open */
+       { &vop_close_desc,(void *) hpfs_close },        /* close */
+       { &vop_access_desc, (void *) hpfs_access },     /* access */
+       { &vop_getattr_desc, (void *) hpfs_getattr },   /* getattr */
        { &vop_setattr_desc, genfs_eopnotsupp },        /* setattr */
-       { &vop_read_desc, (vop_t *) hpfs_read },        /* read */
-       { &vop_write_desc, (vop_t *) hpfs_write },      /* write */
+       { &vop_read_desc, (void *) hpfs_read }, /* read */
+       { &vop_write_desc, (void *) hpfs_write },       /* write */
        { &vop_lease_desc, genfs_lease_check },         /* lease */
        { &vop_fcntl_desc, genfs_fcntl },               /* fcntl */
        { &vop_ioctl_desc, genfs_enoioctl },            /* ioctl */
@@ -1375,16 +1375,16 @@ struct vnodeopv_entry_desc ntfs_vnodeop_entries[] = {
        { &vop_mkdir_desc, genfs_eopnotsupp },          /* mkdir */
        { &vop_rmdir_desc, genfs_eopnotsupp },          /* rmdir */
        { &vop_symlink_desc, genfs_eopnotsupp },        /* symlink */
-       { &vop_readdir_desc, (vop_t *) hpfs_readdir },  /* readdir */
+       { &vop_readdir_desc, (void *) hpfs_readdir },   /* readdir */
        { &vop_readlink_desc, genfs_eopnotsupp },       /* readlink */
        { &vop_abortop_desc, genfs_abortop },           /* abortop */
-       { &vop_inactive_desc, (vop_t *) hpfs_inactive },        /* inactive */
-       { &vop_reclaim_desc, (vop_t *) hpfs_reclaim },  /* reclaim */
+       { &vop_inactive_desc, (void *) hpfs_inactive }, /* inactive */
+       { &vop_reclaim_desc, (void *) hpfs_reclaim },   /* reclaim */
        { &vop_lock_desc, genfs_lock },                 /* lock */
        { &vop_unlock_desc, genfs_unlock },             /* unlock */
-       { &vop_bmap_desc, (vop_t *) hpfs_bmap },        /* bmap */
-       { &vop_strategy_desc, (vop_t *) hpfs_strategy },        /* strategy */
-       { &vop_print_desc, (vop_t *) hpfs_print },      /* print */
+       { &vop_bmap_desc, (void *) hpfs_bmap }, /* bmap */
+       { &vop_strategy_desc, (void *) hpfs_strategy }, /* strategy */
+       { &vop_print_desc, (void *) hpfs_print },       /* print */
        { &vop_islocked_desc, genfs_islocked },         /* islocked */
        { &vop_pathconf_desc, hpfs_pathconf },          /* pathconf */
        { &vop_advlock_desc, genfs_nullop },            /* advlock */
@@ -1398,6 +1398,6 @@ struct vnodeopv_entry_desc ntfs_vnodeop_entries[] = {
        { (struct vnodeop_desc *)NULL, (int (*) (void *))NULL }
 };
 struct vnodeopv_desc ntfs_vnodeop_opv_desc =
-       { &ntfs_vnodeop_p, ntfs_vnodeop_entries };
+       { &ntfs_vnode_vops, ntfs_vnodeop_entries };
 
 #endif
index c348a80..e2a2eb8 100644 (file)
@@ -1,10 +1,9 @@
 # $FreeBSD: src/sys/modules/cd9660/Makefile,v 1.9 1999/12/12 20:34:00 peter Exp $
-# $DragonFly: src/sys/vfs/isofs/cd9660/Makefile,v 1.2 2003/06/17 04:28:43 dillon Exp $
+# $DragonFly: src/sys/vfs/isofs/cd9660/Makefile,v 1.3 2004/08/13 17:51:11 dillon Exp $
 
 .PATH: ${.CURDIR}/../../isofs/cd9660
 KMOD=  cd9660
-SRCS=  vnode_if.h \
-       cd9660_bmap.c cd9660_lookup.c cd9660_node.c cd9660_rrip.c \
+SRCS=  cd9660_bmap.c cd9660_lookup.c cd9660_node.c cd9660_rrip.c \
        cd9660_util.c cd9660_vfsops.c cd9660_vnops.c
 NOMAN=
 
index 35ccf11..cb864d9 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)cd9660_vfsops.c     8.18 (Berkeley) 5/22/95
  * $FreeBSD: src/sys/isofs/cd9660/cd9660_vfsops.c,v 1.74.2.7 2002/04/08 09:39:29 bde Exp $
- * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vfsops.c,v 1.17 2004/06/26 02:15:16 dillon Exp $
+ * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vfsops.c,v 1.18 2004/08/13 17:51:11 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -699,7 +699,7 @@ cd9660_vget_internal(struct mount *mp, ino_t ino, struct vnode **vpp,
                return (0);
 
        /* Allocate a new vnode/iso_node. */
-       if ((error = getnewvnode(VT_ISOFS, mp, cd9660_vnodeop_p, &vp)) != 0) {
+       if ((error = getnewvnode(VT_ISOFS, mp, cd9660_vnode_vops, &vp)) != 0) {
                *vpp = NULLVP;
                return (error);
        }
@@ -831,11 +831,11 @@ cd9660_vget_internal(struct mount *mp, ino_t ino, struct vnode **vpp,
         */
        switch (vp->v_type = IFTOVT(ip->inode.iso_mode)) {
        case VFIFO:
-               vp->v_op = cd9660_fifoop_p;
+               vp->v_vops = cd9660_fifo_vops;
                break;
        case VCHR:
        case VBLK:
-               vp->v_op = cd9660_specop_p;
+               vp->v_vops = cd9660_spec_vops;
                addaliasu(vp, ip->inode.iso_rdev);
                break;
        default:
index fa2bbe6..0d3ff7a 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)cd9660_vnops.c      8.19 (Berkeley) 5/27/95
  * $FreeBSD: src/sys/isofs/cd9660/cd9660_vnops.c,v 1.62 1999/12/15 23:01:51 eivind Exp $
- * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vnops.c,v 1.9 2004/07/18 18:35:20 drhodus Exp $
+ * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vnops.c,v 1.10 2004/08/13 17:51:11 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -842,72 +842,72 @@ cd9660_advlock(ap)
 /*
  * Global vfs data structures for cd9660
  */
-vop_t **cd9660_vnodeop_p;
+struct vop_ops *cd9660_vnode_vops;
 static struct vnodeopv_entry_desc cd9660_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) vop_defaultop },
-       { &vop_access_desc,             (vop_t *) cd9660_access },
-       { &vop_advlock_desc,            (vop_t *) cd9660_advlock },
-       { &vop_bmap_desc,               (vop_t *) cd9660_bmap },
-       { &vop_cachedlookup_desc,       (vop_t *) cd9660_lookup },
-       { &vop_getattr_desc,            (vop_t *) cd9660_getattr },
-       { &vop_inactive_desc,           (vop_t *) cd9660_inactive },
-       { &vop_ioctl_desc,              (vop_t *) cd9660_ioctl },
-       { &vop_islocked_desc,           (vop_t *) vop_stdislocked },
-       { &vop_lock_desc,               (vop_t *) vop_stdlock },
-       { &vop_lookup_desc,             (vop_t *) vfs_cache_lookup },
-       { &vop_pathconf_desc,           (vop_t *) cd9660_pathconf },
-       { &vop_print_desc,              (vop_t *) cd9660_print },
-       { &vop_read_desc,               (vop_t *) cd9660_read },
-       { &vop_readdir_desc,            (vop_t *) cd9660_readdir },
-       { &vop_readlink_desc,           (vop_t *) cd9660_readlink },
-       { &vop_reclaim_desc,            (vop_t *) cd9660_reclaim },
-       { &vop_setattr_desc,            (vop_t *) cd9660_setattr },
-       { &vop_strategy_desc,           (vop_t *) cd9660_strategy },
-       { &vop_unlock_desc,             (vop_t *) vop_stdunlock },
-       { &vop_getpages_desc,           (vop_t *) cd9660_getpages },
-       { &vop_putpages_desc,           (vop_t *) cd9660_putpages },
+       { &vop_default_desc,            (void *) vop_defaultop },
+       { &vop_access_desc,             (void *) cd9660_access },
+       { &vop_advlock_desc,            (void *) cd9660_advlock },
+       { &vop_bmap_desc,               (void *) cd9660_bmap },
+       { &vop_cachedlookup_desc,       (void *) cd9660_lookup },
+       { &vop_getattr_desc,            (void *) cd9660_getattr },
+       { &vop_inactive_desc,           (void *) cd9660_inactive },
+       { &vop_ioctl_desc,              (void *) cd9660_ioctl },
+       { &vop_islocked_desc,           (void *) vop_stdislocked },
+       { &vop_lock_desc,               (void *) vop_stdlock },
+       { &vop_lookup_desc,             (void *) vfs_cache_lookup },
+       { &vop_pathconf_desc,           (void *) cd9660_pathconf },
+       { &vop_print_desc,              (void *) cd9660_print },
+       { &vop_read_desc,               (void *) cd9660_read },
+       { &vop_readdir_desc,            (void *) cd9660_readdir },
+       { &vop_readlink_desc,           (void *) cd9660_readlink },
+       { &vop_reclaim_desc,            (void *) cd9660_reclaim },
+       { &vop_setattr_desc,            (void *) cd9660_setattr },
+       { &vop_strategy_desc,           (void *) cd9660_strategy },
+       { &vop_unlock_desc,             (void *) vop_stdunlock },
+       { &vop_getpages_desc,           (void *) cd9660_getpages },
+       { &vop_putpages_desc,           (void *) cd9660_putpages },
        { NULL, NULL }
 };
 static struct vnodeopv_desc cd9660_vnodeop_opv_desc =
-       { &cd9660_vnodeop_p, cd9660_vnodeop_entries };
+       { &cd9660_vnode_vops, cd9660_vnodeop_entries };
 VNODEOP_SET(cd9660_vnodeop_opv_desc);
 
 /*
  * Special device vnode ops
  */
-vop_t **cd9660_specop_p;
+struct vop_ops *cd9660_spec_vops;
 static struct vnodeopv_entry_desc cd9660_specop_entries[] = {
-       { &vop_default_desc,            (vop_t *) spec_vnoperate },
-       { &vop_access_desc,             (vop_t *) cd9660_access },
-       { &vop_getattr_desc,            (vop_t *) cd9660_getattr },
-       { &vop_inactive_desc,           (vop_t *) cd9660_inactive },
-       { &vop_islocked_desc,           (vop_t *) vop_stdislocked },
-       { &vop_lock_desc,               (vop_t *) vop_stdlock },
-       { &vop_print_desc,              (vop_t *) cd9660_print },
-       { &vop_reclaim_desc,            (vop_t *) cd9660_reclaim },
-       { &vop_setattr_desc,            (vop_t *) cd9660_setattr },
-       { &vop_unlock_desc,             (vop_t *) vop_stdunlock },
+       { &vop_default_desc,            (void *) spec_vnoperate },
+       { &vop_access_desc,             (void *) cd9660_access },
+       { &vop_getattr_desc,            (void *) cd9660_getattr },
+       { &vop_inactive_desc,           (void *) cd9660_inactive },
+       { &vop_islocked_desc,           (void *) vop_stdislocked },
+       { &vop_lock_desc,               (void *) vop_stdlock },
+       { &vop_print_desc,              (void *) cd9660_print },
+       { &vop_reclaim_desc,            (void *) cd9660_reclaim },
+       { &vop_setattr_desc,            (void *) cd9660_setattr },
+       { &vop_unlock_desc,             (void *) vop_stdunlock },
        { NULL, NULL }
 };
 static struct vnodeopv_desc cd9660_specop_opv_desc =
-       { &cd9660_specop_p, cd9660_specop_entries };
+       { &cd9660_spec_vops, cd9660_specop_entries };
 VNODEOP_SET(cd9660_specop_opv_desc);
 
-vop_t **cd9660_fifoop_p;
+struct vop_ops *cd9660_fifo_vops;
 static struct vnodeopv_entry_desc cd9660_fifoop_entries[] = {
-       { &vop_default_desc,            (vop_t *) fifo_vnoperate },
-       { &vop_access_desc,             (vop_t *) cd9660_access },
-       { &vop_getattr_desc,            (vop_t *) cd9660_getattr },
-       { &vop_inactive_desc,           (vop_t *) cd9660_inactive },
-       { &vop_islocked_desc,           (vop_t *) vop_stdislocked },
-       { &vop_lock_desc,               (vop_t *) vop_stdlock },
-       { &vop_print_desc,              (vop_t *) cd9660_print },
-       { &vop_reclaim_desc,            (vop_t *) cd9660_reclaim },
-       { &vop_setattr_desc,            (vop_t *) cd9660_setattr },
-       { &vop_unlock_desc,             (vop_t *) vop_stdunlock },
+       { &vop_default_desc,            (void *) fifo_vnoperate },
+       { &vop_access_desc,             (void *) cd9660_access },
+       { &vop_getattr_desc,            (void *) cd9660_getattr },
+       { &vop_inactive_desc,           (void *) cd9660_inactive },
+       { &vop_islocked_desc,           (void *) vop_stdislocked },
+       { &vop_lock_desc,               (void *) vop_stdlock },
+       { &vop_print_desc,              (void *) cd9660_print },
+       { &vop_reclaim_desc,            (void *) cd9660_reclaim },
+       { &vop_setattr_desc,            (void *) cd9660_setattr },
+       { &vop_unlock_desc,             (void *) vop_stdunlock },
        { NULL, NULL }
 };
 static struct vnodeopv_desc cd9660_fifoop_opv_desc =
-       { &cd9660_fifoop_p, cd9660_fifoop_entries };
+       { &cd9660_fifo_vops, cd9660_fifoop_entries };
 
 VNODEOP_SET(cd9660_fifoop_opv_desc);
index 5f0146c..ecbdea8 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)iso.h       8.6 (Berkeley) 5/10/95
  * $FreeBSD: src/sys/isofs/cd9660/iso.h,v 1.19.2.1 2000/07/08 14:35:56 bp Exp $
- * $DragonFly: src/sys/vfs/isofs/cd9660/iso.h,v 1.3 2003/08/20 09:56:32 rob Exp $
+ * $DragonFly: src/sys/vfs/isofs/cd9660/iso.h,v 1.4 2004/08/13 17:51:11 dillon Exp $
  */
 
 #define ISODCL(from, to) (to - from + 1)
@@ -263,9 +263,9 @@ int cd9660_uninit (struct vfsconf *);
 #define cd9660_sysctl ((int (*) (int *, u_int, void *, size_t *, void *, \
                                     size_t, struct proc *))eopnotsupp)
 
-extern vop_t **cd9660_vnodeop_p;
-extern vop_t **cd9660_specop_p;
-extern vop_t **cd9660_fifoop_p;
+extern struct vop_ops *cd9660_vnode_vops;
+extern struct vop_ops *cd9660_spec_vops;
+extern struct vop_ops *cd9660_fifo_vops;
 
 int isochar (u_char *, u_char *, int, u_char *);
 int isofncmp (u_char *, int, u_char *, int, int);
index 451dc96..51a964c 100644 (file)
@@ -1,9 +1,8 @@
 # $FreeBSD: src/sys/modules/mfs/Makefile,v 1.8 1999/12/12 16:47:26 peter Exp $
-# $DragonFly: src/sys/vfs/mfs/Makefile,v 1.3 2003/08/15 07:26:15 dillon Exp $
+# $DragonFly: src/sys/vfs/mfs/Makefile,v 1.4 2004/08/13 17:51:11 dillon Exp $
 
 KMOD=  mfs
-SRCS=  vnode_if.h \
-       mfs_vfsops.c mfs_vnops.c opt_mfs.h
+SRCS=  mfs_vfsops.c mfs_vnops.c opt_mfs.h
 NOMAN=
 
 .include <bsd.kmod.mk>
index 47b4295..b9b65be 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)mfs_vfsops.c        8.11 (Berkeley) 6/19/95
  * $FreeBSD: src/sys/ufs/mfs/mfs_vfsops.c,v 1.81.2.3 2001/07/04 17:35:21 tegge Exp $
- * $DragonFly: src/sys/vfs/mfs/mfs_vfsops.c,v 1.15 2004/05/19 22:53:04 dillon Exp $
+ * $DragonFly: src/sys/vfs/mfs/mfs_vfsops.c,v 1.16 2004/08/13 17:51:11 dillon Exp $
  */
 
 
@@ -66,7 +66,7 @@
 MALLOC_DEFINE(M_MFSNODE, "MFS node", "MFS vnode private part");
 
 
-extern vop_t **mfs_vnodeop_p;
+extern struct vop_ops *mfs_vnode_vops;
 
 static int     mfs_mount (struct mount *mp,
                        char *path, caddr_t data, struct nameidata *ndp, 
@@ -290,7 +290,7 @@ mfs_mount(struct mount *mp, char *path, caddr_t data, struct nameidata *ndp,
         */
        MALLOC(mfsp, struct mfsnode *, sizeof *mfsp, M_MFSNODE, M_WAITOK);
 
-       err = getnewvnode(VT_MFS, (struct mount *)0, mfs_vnodeop_p, &devvp);
+       err = getnewvnode(VT_MFS, NULL, mfs_vnode_vops, &devvp);
        if (err) {
                FREE(mfsp, M_MFSNODE);
                goto error_1;
index 587d877..4f469cb 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)mfs_vnops.c 8.11 (Berkeley) 5/22/95
  * $FreeBSD: src/sys/ufs/mfs/mfs_vnops.c,v 1.47.2.1 2001/05/22 02:06:43 bp Exp $
- * $DragonFly: src/sys/vfs/mfs/mfs_vnops.c,v 1.13 2004/05/19 22:53:04 dillon Exp $
+ * $DragonFly: src/sys/vfs/mfs/mfs_vnops.c,v 1.14 2004/08/13 17:51:11 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -65,31 +65,31 @@ static int  mfs_getpages (struct vop_getpages_args *); /* XXX */
 /*
  * mfs vnode operations.
  */
-vop_t **mfs_vnodeop_p;
+struct vop_ops *mfs_vnode_vops;
 static struct vnodeopv_entry_desc mfs_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) mfs_badop },
-       { &vop_bmap_desc,               (vop_t *) mfs_bmap },
-       { &vop_bwrite_desc,             (vop_t *) vop_defaultop },
-       { &vop_close_desc,              (vop_t *) mfs_close },
-       { &vop_createvobject_desc,      (vop_t *) vop_stdcreatevobject },
-       { &vop_destroyvobject_desc,     (vop_t *) vop_stddestroyvobject },
-       { &vop_freeblks_desc,           (vop_t *) mfs_freeblks },
-       { &vop_fsync_desc,              (vop_t *) mfs_fsync },
-       { &vop_getpages_desc,           (vop_t *) mfs_getpages },
-       { &vop_getvobject_desc,         (vop_t *) vop_stdgetvobject },
-       { &vop_inactive_desc,           (vop_t *) mfs_inactive },
-       { &vop_ioctl_desc,              (vop_t *) vop_enotty },
-       { &vop_islocked_desc,           (vop_t *) vop_defaultop },
-       { &vop_lock_desc,               (vop_t *) vop_defaultop },
-       { &vop_open_desc,               (vop_t *) mfs_open },
-       { &vop_print_desc,              (vop_t *) mfs_print },
-       { &vop_reclaim_desc,            (vop_t *) mfs_reclaim },
-       { &vop_strategy_desc,           (vop_t *) mfs_strategy },
-       { &vop_unlock_desc,             (vop_t *) vop_defaultop },
+       { &vop_default_desc,            (void *) mfs_badop },
+       { &vop_bmap_desc,               (void *) mfs_bmap },
+       { &vop_bwrite_desc,             vop_defaultop },
+       { &vop_close_desc,              (void *) mfs_close },
+       { &vop_createvobject_desc,      (void *) vop_stdcreatevobject },
+       { &vop_destroyvobject_desc,     (void *) vop_stddestroyvobject },
+       { &vop_freeblks_desc,           (void *) mfs_freeblks },
+       { &vop_fsync_desc,              (void *) mfs_fsync },
+       { &vop_getpages_desc,           (void *) mfs_getpages },
+       { &vop_getvobject_desc,         (void *) vop_stdgetvobject },
+       { &vop_inactive_desc,           (void *) mfs_inactive },
+       { &vop_ioctl_desc,              vop_enotty },
+       { &vop_islocked_desc,           vop_defaultop },
+       { &vop_lock_desc,               vop_defaultop },
+       { &vop_open_desc,               (void *) mfs_open },
+       { &vop_print_desc,              (void *) mfs_print },
+       { &vop_reclaim_desc,            (void *) mfs_reclaim },
+       { &vop_strategy_desc,           (void *) mfs_strategy },
+       { &vop_unlock_desc,             vop_defaultop },
        { NULL, NULL }
 };
 static struct vnodeopv_desc mfs_vnodeop_opv_desc =
-       { &mfs_vnodeop_p, mfs_vnodeop_entries };
+       { &mfs_vnode_vops, mfs_vnodeop_entries };
 
 VNODEOP_SET(mfs_vnodeop_opv_desc);
 
@@ -122,7 +122,7 @@ mfs_open(struct vop_open_args *ap)
 static int
 mfs_fsync(struct vop_fsync_args *ap)
 {
-       return (VOCALL(spec_vnodeop_p, VOFFSET(vop_fsync), ap));
+       return (VOCALL(spec_vnode_vops, VOFFSET(vop_fsync), &ap->a_head));
 }
 
 /*
@@ -405,12 +405,12 @@ mfs_badop(struct vop_generic_args *ap)
 
        printf("mfs_badop[%s]\n", ap->a_desc->vdesc_name);
        i = vop_defaultop(ap);
-       printf("mfs_badop[%s] = %d\n", ap->a_desc->vdesc_name,i);
+       printf("mfs_badop[%s] = %d\n", ap->a_desc->vdesc_name, i);
        return (i);
 }
 
 static int
 mfs_getpages(struct vop_getpages_args *ap)
 {
-       return (VOCALL(spec_vnodeop_p, VOFFSET(vop_getpages), ap));
+       return (VOCALL(spec_vnode_vops, VOFFSET(vop_getpages), &ap->a_head));
 }
index c187325..57c0236 100644 (file)
@@ -1,9 +1,8 @@
 # $FreeBSD: src/sys/modules/msdos/Makefile,v 1.10.2.2 2002/12/01 09:01:08 nyan Exp $
-# $DragonFly: src/sys/vfs/msdosfs/Makefile,v 1.3 2003/08/15 07:26:15 dillon Exp $
+# $DragonFly: src/sys/vfs/msdosfs/Makefile,v 1.4 2004/08/13 17:51:11 dillon Exp $
 
 KMOD=  msdos
-SRCS=  vnode_if.h \
-       msdosfs_conv.c msdosfs_denode.c msdosfs_fat.c msdosfs_lookup.c \
+SRCS=  msdosfs_conv.c msdosfs_denode.c msdosfs_fat.c msdosfs_lookup.c \
        msdosfs_vfsops.c msdosfs_vnops.c
 NOMAN=
 
index 7315e78..20ae751 100644 (file)
@@ -1,5 +1,5 @@
 /* $FreeBSD: src/sys/msdosfs/denode.h,v 1.20 1999/12/29 04:54:52 peter Exp $ */
-/* $DragonFly: src/sys/vfs/msdosfs/denode.h,v 1.5 2003/08/20 09:56:32 rob Exp $ */
+/* $DragonFly: src/sys/vfs/msdosfs/denode.h,v 1.6 2004/08/13 17:51:11 dillon Exp $ */
 /*     $NetBSD: denode.h,v 1.25 1997/11/17 15:36:28 ws Exp $   */
 
 /*-
@@ -260,7 +260,7 @@ struct defid {
 #endif
 };
 
-extern vop_t **msdosfs_vnodeop_p;
+extern struct vop_ops *msdosfs_vnode_vops;
 
 int msdosfs_lookup (struct vop_cachedlookup_args *);
 int msdosfs_inactive (struct vop_inactive_args *);
index 7c0ca69..a831751 100644 (file)
@@ -1,5 +1,5 @@
 /* $FreeBSD: src/sys/msdosfs/msdosfs_denode.c,v 1.47.2.3 2002/08/22 16:20:15 trhodes Exp $ */
-/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_denode.c,v 1.12 2004/04/24 04:32:04 drhodus Exp $ */
+/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_denode.c,v 1.13 2004/08/13 17:51:11 dillon Exp $ */
 /*     $NetBSD: msdosfs_denode.c,v 1.28 1998/02/10 14:10:00 mrg Exp $  */
 
 /*-
@@ -266,7 +266,7 @@ deget(struct msdosfsmount *pmp,     /* so we know the maj/min number */
         * copy it from the passed disk buffer.
         */
        /* getnewvnode() does a vref() on the vnode */
-       error = getnewvnode(VT_MSDOSFS, mntp, msdosfs_vnodeop_p, &nvp);
+       error = getnewvnode(VT_MSDOSFS, mntp, msdosfs_vnode_vops, &nvp);
        if (error) {
                *depp = NULL;
                FREE(ldep, M_MSDOSFSNODE);
index 4ca8546..793e0c2 100644 (file)
@@ -1,5 +1,5 @@
 /* $FreeBSD: src/sys/msdosfs/msdosfs_vnops.c,v 1.95.2.4 2003/06/13 15:05:47 trhodes Exp $ */
-/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vnops.c,v 1.15 2004/04/17 00:30:17 cpressey Exp $ */
+/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vnops.c,v 1.16 2004/08/13 17:51:11 dillon Exp $ */
 /*     $NetBSD: msdosfs_vnops.c,v 1.68 1998/02/10 14:10:04 mrg Exp $   */
 
 /*-
@@ -1895,41 +1895,41 @@ msdosfs_putpages(struct vop_putpages_args *ap)
 }
 
 /* Global vfs data structures for msdosfs */
-vop_t **msdosfs_vnodeop_p;
+struct vop_ops *msdosfs_vnode_vops;
 static struct vnodeopv_entry_desc msdosfs_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) vop_defaultop },
-       { &vop_access_desc,             (vop_t *) msdosfs_access },
-       { &vop_bmap_desc,               (vop_t *) msdosfs_bmap },
-       { &vop_cachedlookup_desc,       (vop_t *) msdosfs_lookup },
-       { &vop_close_desc,              (vop_t *) msdosfs_close },
-       { &vop_create_desc,             (vop_t *) msdosfs_create },
-       { &vop_fsync_desc,              (vop_t *) msdosfs_fsync },
-       { &vop_getattr_desc,            (vop_t *) msdosfs_getattr },
-       { &vop_inactive_desc,           (vop_t *) msdosfs_inactive },
-       { &vop_islocked_desc,           (vop_t *) vop_stdislocked },
-       { &vop_link_desc,               (vop_t *) msdosfs_link },
-       { &vop_lock_desc,               (vop_t *) vop_stdlock },
-       { &vop_lookup_desc,             (vop_t *) vfs_cache_lookup },
-       { &vop_mkdir_desc,              (vop_t *) msdosfs_mkdir },
-       { &vop_mknod_desc,              (vop_t *) msdosfs_mknod },
-       { &vop_pathconf_desc,           (vop_t *) msdosfs_pathconf },
-       { &vop_print_desc,              (vop_t *) msdosfs_print },
-       { &vop_read_desc,               (vop_t *) msdosfs_read },
-       { &vop_readdir_desc,            (vop_t *) msdosfs_readdir },
-       { &vop_reclaim_desc,            (vop_t *) msdosfs_reclaim },
-       { &vop_remove_desc,             (vop_t *) msdosfs_remove },
-       { &vop_rename_desc,             (vop_t *) msdosfs_rename },
-       { &vop_rmdir_desc,              (vop_t *) msdosfs_rmdir },
-       { &vop_setattr_desc,            (vop_t *) msdosfs_setattr },
-       { &vop_strategy_desc,           (vop_t *) msdosfs_strategy },
-       { &vop_symlink_desc,            (vop_t *) msdosfs_symlink },
-       { &vop_unlock_desc,             (vop_t *) vop_stdunlock },
-       { &vop_write_desc,              (vop_t *) msdosfs_write },
-       { &vop_getpages_desc,           (vop_t *) msdosfs_getpages },
-       { &vop_putpages_desc,           (vop_t *) msdosfs_putpages },
+       { &vop_default_desc,            vop_defaultop },
+       { &vop_access_desc,             (void *) msdosfs_access },
+       { &vop_bmap_desc,               (void *) msdosfs_bmap },
+       { &vop_cachedlookup_desc,       (void *) msdosfs_lookup },
+       { &vop_close_desc,              (void *) msdosfs_close },
+       { &vop_create_desc,             (void *) msdosfs_create },
+       { &vop_fsync_desc,              (void *) msdosfs_fsync },
+       { &vop_getattr_desc,            (void *) msdosfs_getattr },
+       { &vop_inactive_desc,           (void *) msdosfs_inactive },
+       { &vop_islocked_desc,           (void *) vop_stdislocked },
+       { &vop_link_desc,               (void *) msdosfs_link },
+       { &vop_lock_desc,               (void *) vop_stdlock },
+       { &vop_lookup_desc,             (void *) vfs_cache_lookup },
+       { &vop_mkdir_desc,              (void *) msdosfs_mkdir },
+       { &vop_mknod_desc,              (void *) msdosfs_mknod },
+       { &vop_pathconf_desc,           (void *) msdosfs_pathconf },
+       { &vop_print_desc,              (void *) msdosfs_print },
+       { &vop_read_desc,               (void *) msdosfs_read },
+       { &vop_readdir_desc,            (void *) msdosfs_readdir },
+       { &vop_reclaim_desc,            (void *) msdosfs_reclaim },
+       { &vop_remove_desc,             (void *) msdosfs_remove },
+       { &vop_rename_desc,             (void *) msdosfs_rename },
+       { &vop_rmdir_desc,              (void *) msdosfs_rmdir },
+       { &vop_setattr_desc,            (void *) msdosfs_setattr },
+       { &vop_strategy_desc,           (void *) msdosfs_strategy },
+       { &vop_symlink_desc,            (void *) msdosfs_symlink },
+       { &vop_unlock_desc,             (void *) vop_stdunlock },
+       { &vop_write_desc,              (void *) msdosfs_write },
+       { &vop_getpages_desc,           (void *) msdosfs_getpages },
+       { &vop_putpages_desc,           (void *) msdosfs_putpages },
        { NULL, NULL }
 };
 static struct vnodeopv_desc msdosfs_vnodeop_opv_desc =
-       { &msdosfs_vnodeop_p, msdosfs_vnodeop_entries };
+       { &msdosfs_vnode_vops, msdosfs_vnodeop_entries };
 
 VNODEOP_SET(msdosfs_vnodeop_opv_desc);
index 4d79f87..51e4373 100644 (file)
@@ -1,9 +1,8 @@
 # $FreeBSD: src/sys/modules/nfs/Makefile,v 1.16 1999/12/12 20:34:06 peter Exp $
-# $DragonFly: src/sys/vfs/nfs/Makefile,v 1.3 2003/08/15 07:26:15 dillon Exp $
+# $DragonFly: src/sys/vfs/nfs/Makefile,v 1.4 2004/08/13 17:51:11 dillon Exp $
 
 KMOD=  nfs
-SRCS=  vnode_if.h \
-       nfs_bio.c nfs_node.c nfs_nqlease.c nfs_serv.c nfs_socket.c \
+SRCS=  nfs_bio.c nfs_node.c nfs_nqlease.c nfs_serv.c nfs_socket.c \
        nfs_srvcache.c nfs_subs.c nfs_syscalls.c nfs_vfsops.c \
        nfs_vnops.c opt_inet.h opt_nfs.h opt_vmpage.h opt_bootp.h
 NFS_INET?=     1       # 0/1 - requires INET to be configured in kernel
index 85e8940..5b44b5c 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_node.c  8.6 (Berkeley) 5/22/95
  * $FreeBSD: src/sys/nfs/nfs_node.c,v 1.36.2.3 2002/01/05 22:25:04 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_node.c,v 1.10 2004/04/19 16:33:49 cpressey Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_node.c,v 1.11 2004/08/13 17:51:11 dillon Exp $
  */
 
 
@@ -137,7 +137,7 @@ loop:
         */
        np = zalloc(nfsnode_zone);
                
-       error = getnewvnode(VT_NFS, mntp, nfsv2_vnodeop_p, &nvp);
+       error = getnewvnode(VT_NFS, mntp, nfsv2_vnode_vops, &nvp);
        if (error) {
                if (nfs_node_hash_lock < 0)
                        wakeup(&nfs_node_hash_lock);
index 8b63b28..e95c9a0 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_nqlease.c       8.9 (Berkeley) 5/20/95
  * $FreeBSD: src/sys/nfs/nfs_nqlease.c,v 1.50 2000/02/13 03:32:05 peter Exp $
- * $DragonFly: src/sys/vfs/nfs/Attic/nfs_nqlease.c,v 1.17 2004/08/02 13:22:34 joerg Exp $
+ * $DragonFly: src/sys/vfs/nfs/Attic/nfs_nqlease.c,v 1.18 2004/08/13 17:51:11 dillon Exp $
  */
 
 
@@ -329,7 +329,7 @@ doreply:
  * Ifdef'd code in nfsnode.h renames these routines to whatever a particular
  * OS needs.
  */
-void
+int
 nqnfs_lease_check(struct vnode *vp, struct thread *td,
                  struct ucred *cred, int flag)
 {
@@ -337,8 +337,9 @@ nqnfs_lease_check(struct vnode *vp, struct thread *td,
        int cache;
        u_quad_t frev;
 
-       (void) nqsrv_getlease(vp, &duration, ND_CHECK | flag, NQLOCALSLP,
+       nqsrv_getlease(vp, &duration, ND_CHECK | flag, NQLOCALSLP,
                td, (struct sockaddr *)0, &cache, &frev, cred);
+       return(0);
 }
 
 /*
index 3da6fd7..9a534b1 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_subs.c  8.8 (Berkeley) 5/22/95
  * $FreeBSD: /repoman/r/ncvs/src/sys/nfsclient/nfs_subs.c,v 1.128 2004/04/14 23:23:55 peadar Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_subs.c,v 1.18 2004/06/02 14:43:04 eirikn Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_subs.c,v 1.19 2004/08/13 17:51:11 dillon Exp $
  */
 
 /*
@@ -116,7 +116,7 @@ static sy_call_t *nfs_prev_nfssvc_sy_call;
 
 #ifndef NFS_NOSERVER
 
-static vop_t *nfs_prev_vop_lease_check;
+static int (*nfs_prev_vop_lease_check)(struct vop_lease_args *);
 
 /*
  * Mapping of old NFS Version 2 RPC numbers to generic numbers.
@@ -1124,8 +1124,8 @@ nfs_init(struct vfsconf *vfsp)
         * of the system can call us, if we are loadable.
         */
 #ifndef NFS_NOSERVER
-       nfs_prev_vop_lease_check = default_vnodeop_p[VOFFSET(vop_lease)];
-       default_vnodeop_p[VOFFSET(vop_lease)] = (vop_t *)nqnfs_vop_lease_check;
+       nfs_prev_vop_lease_check = default_vnode_vops->vop_lease;
+       default_vnode_vops->vop_lease = nqnfs_vop_lease_check;
 #endif
        nfs_prev_lease_updatetime = lease_updatetime;
        lease_updatetime = nfs_lease_updatetime;
@@ -1146,7 +1146,7 @@ nfs_uninit(struct vfsconf *vfsp)
        untimeout(nfs_timer, (void *)NULL, nfs_timer_handle);
        nfs_mount_type = -1;
 #ifndef NFS_NOSERVER
-       default_vnodeop_p[VOFFSET(vop_lease)] = nfs_prev_vop_lease_check;
+       default_vnode_vops->vop_lease = nfs_prev_vop_lease_check;
 #endif
        lease_updatetime = nfs_prev_lease_updatetime;
        sysent[SYS_nfssvc].sy_narg = nfs_prev_nfssvc_sy_narg;
@@ -1242,10 +1242,10 @@ nfs_loadattrcache(struct vnode **vpp, struct mbuf **mdp, caddr_t *dposp,
        if (vp->v_type != vtyp) {
                vp->v_type = vtyp;
                if (vp->v_type == VFIFO) {
-                       vp->v_op = fifo_nfsv2nodeop_p;
+                       vp->v_vops = fifo_nfsv2node_vops;
                }
                if (vp->v_type == VCHR || vp->v_type == VBLK) {
-                       vp->v_op = spec_nfsv2nodeop_p;
+                       vp->v_vops = spec_nfsv2node_vops;
                        addaliasu(vp, rdev);
                }
                np->n_mtime = mtime.tv_sec;
index fea4148..f9d9739 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_vnops.c 8.16 (Berkeley) 5/27/95
  * $FreeBSD: src/sys/nfs/nfs_vnops.c,v 1.150.2.5 2001/12/20 19:56:28 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_vnops.c,v 1.25 2004/08/02 13:22:34 joerg Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_vnops.c,v 1.26 2004/08/13 17:51:12 dillon Exp $
  */
 
 
@@ -138,94 +138,94 @@ static int        nfs_bwrite (struct vop_bwrite_args *);
 /*
  * Global vfs data structures for nfs
  */
-vop_t **nfsv2_vnodeop_p;
+struct vop_ops *nfsv2_vnode_vops;
 static struct vnodeopv_entry_desc nfsv2_vnodeop_entries[] = {
-       { &vop_default_desc,            (vop_t *) vop_defaultop },
-       { &vop_access_desc,             (vop_t *) nfs_access },
-       { &vop_advlock_desc,            (vop_t *) nfs_advlock },
-       { &vop_bmap_desc,               (vop_t *) nfs_bmap },
-       { &vop_bwrite_desc,             (vop_t *) nfs_bwrite },
-       { &vop_close_desc,              (vop_t *) nfs_close },
-       { &vop_create_desc,             (vop_t *) nfs_create },
-       { &vop_fsync_desc,              (vop_t *) nfs_fsync },
-       { &vop_getattr_desc,            (vop_t *) nfs_getattr },
-       { &vop_getpages_desc,           (vop_t *) nfs_getpages },
-       { &vop_putpages_desc,           (vop_t *) nfs_putpages },
-       { &vop_inactive_desc,           (vop_t *) nfs_inactive },
-       { &vop_islocked_desc,           (vop_t *) vop_stdislocked },
-       { &vop_lease_desc,              (vop_t *) vop_null },
-       { &vop_link_desc,               (vop_t *) nfs_link },
-       { &vop_lock_desc,               (vop_t *) vop_sharedlock },
-       { &vop_lookup_desc,             (vop_t *) nfs_lookup },
-       { &vop_mkdir_desc,              (vop_t *) nfs_mkdir },
-       { &vop_mknod_desc,              (vop_t *) nfs_mknod },
-       { &vop_mmap_desc,               (vop_t *) nfs_mmap },
-       { &vop_open_desc,               (vop_t *) nfs_open },
-       { &vop_poll_desc,               (vop_t *) nfs_poll },
-       { &vop_print_desc,              (vop_t *) nfs_print },
-       { &vop_read_desc,               (vop_t *) nfs_read },
-       { &vop_readdir_desc,            (vop_t *) nfs_readdir },
-       { &vop_readlink_desc,           (vop_t *) nfs_readlink },
-       { &vop_reclaim_desc,            (vop_t *) nfs_reclaim },
-       { &vop_remove_desc,             (vop_t *) nfs_remove },
-       { &vop_rename_desc,             (vop_t *) nfs_rename },
-       { &vop_rmdir_desc,              (vop_t *) nfs_rmdir },
-       { &vop_setattr_desc,            (vop_t *) nfs_setattr },
-       { &vop_strategy_desc,           (vop_t *) nfs_strategy },
-       { &vop_symlink_desc,            (vop_t *) nfs_symlink },
-       { &vop_unlock_desc,             (vop_t *) vop_stdunlock },
-       { &vop_write_desc,              (vop_t *) nfs_write },
+       { &vop_default_desc,            vop_defaultop },
+       { &vop_access_desc,             (void *) nfs_access },
+       { &vop_advlock_desc,            (void *) nfs_advlock },
+       { &vop_bmap_desc,               (void *) nfs_bmap },
+       { &vop_bwrite_desc,             (void *) nfs_bwrite },
+       { &vop_close_desc,              (void *) nfs_close },
+       { &vop_create_desc,             (void *) nfs_create },
+       { &vop_fsync_desc,              (void *) nfs_fsync },
+       { &vop_getattr_desc,            (void *) nfs_getattr },
+       { &vop_getpages_desc,           (void *) nfs_getpages },
+       { &vop_putpages_desc,           (void *) nfs_putpages },
+       { &vop_inactive_desc,           (void *) nfs_inactive },
+       { &vop_islocked_desc,           (void *) vop_stdislocked },
+       { &vop_lease_desc,              vop_null },
+       { &vop_link_desc,               (void *) nfs_link },
+       { &vop_lock_desc,               (void *) vop_sharedlock },
+       { &vop_lookup_desc,             (void *) nfs_lookup },
+       { &vop_mkdir_desc,              (void *) nfs_mkdir },
+       { &vop_mknod_desc,              (void *) nfs_mknod },
+       { &vop_mmap_desc,               (void *) nfs_mmap },
+       { &vop_open_desc,               (void *) nfs_open },
+       { &vop_poll_desc,               (void *) nfs_poll },
+       { &vop_print_desc,              (void *) nfs_print },
+       { &vop_read_desc,               (void *) nfs_read },
+       { &vop_readdir_desc,            (void *) nfs_readdir },
+       { &vop_readlink_desc,           (void *) nfs_readlink },
+       { &vop_reclaim_desc,            (void *) nfs_reclaim },
+       { &vop_remove_desc,             (void *) nfs_remove },
+       { &vop_rename_desc,             (void *) nfs_rename },
+       { &vop_rmdir_desc,              (void *) nfs_rmdir },
+       { &vop_setattr_desc,            (void *) nfs_setattr },
+       { &vop_strategy_desc,           (void *) nfs_strategy },
+       { &vop_symlink_desc,            (void *) nfs_symlink },
+       { &vop_unlock_desc,             (void *) vop_stdunlock },
+       { &vop_write_desc,              (void *) nfs_write },
        { NULL, NULL }
 };
 static struct vnodeopv_desc nfsv2_vnodeop_opv_desc =
-       { &nfsv2_vnodeop_p, nfsv2_vnodeop_entries };
+       { &nfsv2_vnode_vops, nfsv2_vnodeop_entries };
 VNODEOP_SET(nfsv2_vnodeop_opv_desc);
 
 /*
  * Special device vnode ops
  */
-vop_t **spec_nfsv2nodeop_p;
+struct vop_ops *spec_nfsv2node_vops;
 static struct vnodeopv_entry_desc nfsv2_specop_entries[] = {
-       { &vop_default_desc,            (vop_t *) spec_vnoperate },
-       { &vop_access_desc,             (vop_t *) nfsspec_access },
-       { &vop_close_desc,              (vop_t *) nfsspec_close },
-       { &vop_fsync_desc,              (vop_t *) nfs_fsync },
-       { &vop_getattr_desc,            (vop_t *) nfs_getattr },
-       { &vop_inactive_desc,           (vop_t *) nfs_inactive },
-       { &vop_islocked_desc,           (vop_t *) vop_stdislocked },
-       { &vop_lock_desc,               (vop_t *) vop_sharedlock },
-       { &vop_print_desc,              (vop_t *) nfs_print },
-       { &vop_read_desc,               (vop_t *) nfsspec_read },
-       { &vop_reclaim_desc,            (vop_t *) nfs_reclaim },
-       { &vop_setattr_desc,            (vop_t *) nfs_setattr },
-       { &vop_unlock_desc,             (vop_t *) vop_stdunlock },
-       { &vop_write_desc,              (vop_t *) nfsspec_write },
+       { &vop_default_desc,            (void *) spec_vnoperate },
+       { &vop_access_desc,             (void *) nfsspec_access },
+       { &vop_close_desc,              (void *) nfsspec_close },
+       { &vop_fsync_desc,              (void *) nfs_fsync },
+       { &vop_getattr_desc,            (void *) nfs_getattr },
+       { &vop_inactive_desc,           (void *) nfs_inactive },
+       { &vop_islocked_desc,           (void *) vop_stdislocked },
+       { &vop_lock_desc,               (void *) vop_sharedlock },
+       { &vop_print_desc,              (void *) nfs_print },
+       { &vop_read_desc,               (void *) nfsspec_read },
+       { &vop_reclaim_desc,            (void *) nfs_reclaim },
+       { &vop_setattr_desc,            (void *) nfs_setattr },
+       { &vop_unlock_desc,             (void *) vop_stdunlock },
+       { &vop_write_desc,              (void *) nfsspec_write },
        { NULL, NULL }
 };
 static struct vnodeopv_desc spec_nfsv2nodeop_opv_desc =
-       { &spec_nfsv2nodeop_p, nfsv2_specop_entries };
+       { &spec_nfsv2node_vops, nfsv2_specop_entries };
 VNODEOP_SET(spec_nfsv2nodeop_opv_desc);
 
-vop_t **fifo_nfsv2nodeop_p;
+struct vop_ops *fifo_nfsv2node_vops;
 static struct vnodeopv_entry_desc nfsv2_fifoop_entries[] = {
-       { &vop_default_desc,            (vop_t *) fifo_vnoperate },
-       { &vop_access_desc,             (vop_t *) nfsspec_access },
-       { &vop_close_desc,              (vop_t *) nfsfifo_close },
-       { &vop_fsync_desc,              (vop_t *) nfs_fsync },
-       { &vop_getattr_desc,            (vop_t *) nfs_getattr },
-       { &vop_inactive_desc,           (vop_t *) nfs_inactive },
-       { &vop_islocked_desc,           (vop_t *) vop_stdislocked },
-       { &vop_lock_desc,               (vop_t *) vop_sharedlock },
-       { &vop_print_desc,              (vop_t *) nfs_print },
-       { &vop_read_desc,               (vop_t *) nfsfifo_read },
-       { &vop_reclaim_desc,            (vop_t *) nfs_reclaim },
-       { &vop_setattr_desc,            (vop_t *) nfs_setattr },
-       { &vop_unlock_desc,             (vop_t *) vop_stdunlock },
-       { &vop_write_desc,              (vop_t *) nfsfifo_write },
+       { &vop_default_desc,            (void *) fifo_vnoperate },
+       { &vop_access_desc,             (void *) nfsspec_access },
+       { &vop_close_desc,              (void *) nfsfifo_close },
+       { &vop_fsync_desc,              (void *) nfs_fsync },
+       { &vop_getattr_desc,            (void *) nfs_getattr },
+       { &vop_inactive_desc,           (void *) nfs_inactive },
+       { &vop_islocked_desc,           (void *) vop_stdislocked },
+       { &vop_lock_desc,               (void *) vop_sharedlock },
+       { &vop_print_desc,              (void *) nfs_print },
+       { &vop_read_desc,               (void *) nfsfifo_read },
+       { &vop_reclaim_desc,            (void *) nfs_reclaim },
+       { &vop_setattr_desc,            (void *) nfs_setattr },
+       { &vop_unlock_desc,             (void *) vop_stdunlock },
+       { &vop_write_desc,              (void *) nfsfifo_write },
        { NULL, NULL }
 };
 static struct vnodeopv_desc fifo_nfsv2nodeop_opv_desc =
-       { &fifo_nfsv2nodeop_p, nfsv2_fifoop_entries };
+       { &fifo_nfsv2node_vops, nfsv2_fifoop_entries };
 VNODEOP_SET(fifo_nfsv2nodeop_opv_desc);
 
 static int     nfs_mknodrpc (struct vnode *dvp, struct vnode **vpp,
@@ -3200,7 +3200,7 @@ nfsspec_read(struct vop_read_args *ap)
         */
        np->n_flag |= NACC;
        getnanotime(&np->n_atim);
-       return (VOCALL(spec_vnodeop_p, VOFFSET(vop_read), ap));
+       return (VOCALL(spec_vnode_vops, VOFFSET(vop_read), &ap->a_head));
 }
 
 /*
@@ -3219,7 +3219,7 @@ nfsspec_write(struct vop_write_args *ap)
         */
        np->n_flag |= NUPD;
        getnanotime(&np->n_mtim);
-       return (VOCALL(spec_vnodeop_p, VOFFSET(vop_write), ap));
+       return (VOCALL(spec_vnode_vops, VOFFSET(vop_write), &ap->a_head));
 }
 
 /*
@@ -3249,7 +3249,7 @@ nfsspec_close(struct vop_close_args *ap)
                        (void)VOP_SETATTR(vp, &vattr, nfs_vpcred(vp, ND_WRITE), ap->a_td);
                }
        }
-       return (VOCALL(spec_vnodeop_p, VOFFSET(vop_close), ap));
+       return (VOCALL(spec_vnode_vops, VOFFSET(vop_close), &ap->a_head));
 }
 
 /*
@@ -3268,7 +3268,7 @@ nfsfifo_read(struct vop_read_args *ap)
         */
        np->n_flag |= NACC;
        getnanotime(&np->n_atim);
-       return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_read), ap));
+       return (VOCALL(fifo_vnode_vops, VOFFSET(vop_read), &ap->a_head));
 }
 
 /*
@@ -3287,7 +3287,7 @@ nfsfifo_write(struct vop_write_args *ap)
         */
        np->n_flag |= NUPD;
        getnanotime(&np->n_mtim);
-       return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_write), ap));
+       return (VOCALL(fifo_vnode_vops, VOFFSET(vop_write), &ap->a_head));
 }
 
 /*
@@ -3322,6 +3322,6 @@ nfsfifo_close(struct vop_close_args *ap)
                        (void)VOP_SETATTR(vp, &vattr, nfs_vpcred(vp, ND_WRITE), ap->a_td);
                }
        }
-       return (VOCALL(fifo_vnodeop_p, VOFFSET(vop_close), ap));
+       return (VOCALL(fifo_vnode_vops, VOFFSET(vop_close), &ap->a_head));
 }
 
index 85c3a95..e8cf258 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfsnode.h   8.9 (Berkeley) 5/14/95
  * $FreeBSD: /repoman/r/ncvs/src/sys/nfsclient/nfsnode.h,v 1.43 2004/04/14 23:23:55 peadar Exp $
- * $DragonFly: src/sys/vfs/nfs/nfsnode.h,v 1.9 2004/05/03 16:06:26 joerg Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfsnode.h,v 1.10 2004/08/13 17:51:12 dillon Exp $
  */
 
 
@@ -207,9 +207,9 @@ nfs_vpcred(struct vnode *vp, int ndflag)
        return(VFSTONFS((vp)->v_mount)->nm_cred);
 }
 
-extern vop_t   **fifo_nfsv2nodeop_p;
-extern vop_t   **nfsv2_vnodeop_p;
-extern vop_t   **spec_nfsv2nodeop_p;
+extern struct vop_ops *fifo_nfsv2node_vops;
+extern struct vop_ops *nfsv2_vnode_vops;
+extern struct vop_ops *spec_nfsv2node_vops;
 
 /*
  * Prototypes for NFS vnode operations
index ebe2c23..c5ab451 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nqnfs.h     8.3 (Berkeley) 3/30/95
  * $FreeBSD: src/sys/nfs/nqnfs.h,v 1.22 2000/02/13 03:32:07 peter Exp $
- * $DragonFly: src/sys/vfs/nfs/Attic/nqnfs.h,v 1.5 2003/08/20 09:56:33 rob Exp $
+ * $DragonFly: src/sys/vfs/nfs/Attic/nqnfs.h,v 1.6 2004/08/13 17:51:12 dillon Exp $
  */
 
 
@@ -190,7 +190,7 @@ extern u_long nqfhhash;
 #define        NQNFS_EXPIRED   500
 #define        NQNFS_TRYLATER  501
 
-void   nqnfs_lease_check (struct vnode *, struct thread *, struct ucred *, int);
+int    nqnfs_lease_check (struct vnode *, struct thread *, struct ucred *, int);
 void   nqnfs_lease_updatetime (int);
 int    nqsrv_getlease (struct vnode *, u_int32_t *, int,
                            struct nfssvc_sock *, struct thread *,
index bcf149b..5cc4336 100644 (file)
@@ -1,9 +1,8 @@
 # $FreeBSD: src/sys/modules/ntfs/Makefile,v 1.5 1999/12/12 20:34:07 peter Exp $
-# $DragonFly: src/sys/vfs/ntfs/Makefile,v 1.3 2003/08/15 07:26:15 dillon Exp $
+# $DragonFly: src/sys/vfs/ntfs/Makefile,v 1.4 2004/08/13 17:51:12 dillon Exp $
 
 KMOD=  ntfs
-SRCS=  vnode_if.h \
-       ntfs_vfsops.c ntfs_vnops.c ntfs_subr.c ntfs_ihash.c \
+SRCS=  ntfs_vfsops.c ntfs_vnops.c ntfs_subr.c ntfs_ihash.c \
        ntfs_compr.c
 NOMAN=
 
index e155cd1..b4f495b 100644 (file)
@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/ntfs/ntfs.h,v 1.8.2.2 2001/10/12 22:08:49 semenu Exp $
- * $DragonFly: src/sys/vfs/ntfs/ntfs.h,v 1.4 2004/03/01 06:33:22 dillon Exp $
+ * $DragonFly: src/sys/vfs/ntfs/ntfs.h,v 1.5 2004/08/13 17:51:12 dillon Exp $
  */
 
 /*#define NTFS_DEBUG 1*/
@@ -336,4 +336,4 @@ typedef int (vop_t) (void *);
 #define ddprintf(a)
 #endif
 
-extern vop_t  **ntfs_vnodeop_p;
+extern struct vop_ops  *ntfs_vnode_vops;
index e137f36..dd3c3be 100644 (file)
@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/ntfs/ntfs_vfsops.c,v 1.20.2.5 2001/12/25 01:44:45 dillon Exp $
- * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.17 2004/05/26 07:45:26 dillon Exp $
+ * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.18 2004/08/13 17:51:12 dillon Exp $
  */
 
 
@@ -913,7 +913,7 @@ ntfs_vgetex(struct mount *mp, ino_t ino, u_int32_t attrtype, char *attrname,
                return (0);
        }
 
-       error = getnewvnode(VT_NTFS, ntmp->ntm_mountp, ntfs_vnodeop_p, &vp);
+       error = getnewvnode(VT_NTFS, ntmp->ntm_mountp, ntfs_vnode_vops, &vp);
        if(error) {
                ntfs_frele(fp);
                ntfs_ntput(ip);
index bb27efa..48ad085 100644 (file)
@@ -36,7 +36,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/ntfs/ntfs_vnops.c,v 1.9.2.4 2002/08/06 19:35:18 semenu Exp $
- * $DragonFly: src/sys/vfs/ntfs/ntfs_vnops.c,v 1.12 2004/04/24 04:32:04 drhodus Exp $
+ * $DragonFly: src/sys/vfs/ntfs/ntfs_vnops.c,v 1.13 2004/08/13 17:51:12 dillon Exp $
  *
  */
 
@@ -98,7 +98,7 @@ static int    ntfs_getpages (struct vop_getpages_args *ap);
 static int     ntfs_putpages (struct vop_putpages_args *);
 static int     ntfs_fsync (struct vop_fsync_args *ap);
 #else
-static int     ntfs_bypass (struct vop_generic_args *ap);
+static int     ntfs_bypass (struct vop_generic_args *);
 #endif
 static int     ntfs_pathconf (void *);
 
@@ -864,61 +864,61 @@ ntfs_pathconf(void *v)
 /*
  * Global vfs data structures
  */
-vop_t **ntfs_vnodeop_p;
+struct vop_ops *ntfs_vnode_vops;
 #if defined(__DragonFly__)
 static
 struct vnodeopv_entry_desc ntfs_vnodeop_entries[] = {
-       { &vop_default_desc, (vop_t *)vop_defaultop },
-
-       { &vop_getattr_desc, (vop_t *)ntfs_getattr },
-       { &vop_inactive_desc, (vop_t *)ntfs_inactive },
-       { &vop_reclaim_desc, (vop_t *)ntfs_reclaim },
-       { &vop_print_desc, (vop_t *)ntfs_print },
-       { &vop_pathconf_desc, ntfs_pathconf },
-
-       { &vop_islocked_desc, (vop_t *)vop_stdislocked },
-       { &vop_unlock_desc, (vop_t *)vop_stdunlock },
-       { &vop_lock_desc, (vop_t *)vop_stdlock },
-       { &vop_cachedlookup_desc, (vop_t *)ntfs_lookup },
-       { &vop_lookup_desc, (vop_t *)vfs_cache_lookup },
-
-       { &vop_access_desc, (vop_t *)ntfs_access },
-       { &vop_close_desc, (vop_t *)ntfs_close },
-       { &vop_open_desc, (vop_t *)ntfs_open },
-       { &vop_readdir_desc, (vop_t *)ntfs_readdir },
-       { &vop_fsync_desc, (vop_t *)ntfs_fsync },
-
-       { &vop_bmap_desc, (vop_t *)ntfs_bmap },
-       { &vop_getpages_desc, (vop_t *) ntfs_getpages },
-       { &vop_putpages_desc, (vop_t *) ntfs_putpages },
-       { &vop_strategy_desc, (vop_t *)ntfs_strategy },
-       { &vop_bwrite_desc, (vop_t *)vop_stdbwrite },
-       { &vop_read_desc, (vop_t *)ntfs_read },
-       { &vop_write_desc, (vop_t *)ntfs_write },
+       { &vop_default_desc,    vop_defaultop },
+
+       { &vop_getattr_desc,    (void *)ntfs_getattr },
+       { &vop_inactive_desc,   (void *)ntfs_inactive },
+       { &vop_reclaim_desc,    (void *)ntfs_reclaim },
+       { &vop_print_desc,      (void *)ntfs_print },
+       { &vop_pathconf_desc,   (void *)ntfs_pathconf },
+
+       { &vop_islocked_desc,   (void *)vop_stdislocked },
+       { &vop_unlock_desc,     (void *)vop_stdunlock },
+       { &vop_lock_desc,       (void *)vop_stdlock },
+       { &vop_cachedlookup_desc,(void *)ntfs_lookup },
+       { &vop_lookup_desc,     (void *)vfs_cache_lookup },
+
+       { &vop_access_desc,     (void *)ntfs_access },
+       { &vop_close_desc,      (void *)ntfs_close },
+       { &vop_open_desc,       (void *)ntfs_open },
+       { &vop_readdir_desc,    (void *)ntfs_readdir },
+       { &vop_fsync_desc,      (void *)ntfs_fsync },
+
+       { &vop_bmap_desc,       (void *)ntfs_bmap },
+       { &vop_getpages_desc,   (void *)ntfs_getpages },
+       { &vop_putpages_desc,   (void *)ntfs_putpages },
+       { &vop_strategy_desc,   (void *)ntfs_strategy },
+       { &vop_bwrite_desc,     (void *)vop_stdbwrite },
+       { &vop_read_desc,       (void *)ntfs_read },
+       { &vop_write_desc,      (void *)ntfs_write },
 
        { NULL, NULL }
 };
 
 static
 struct vnodeopv_desc ntfs_vnodeop_opv_desc =
-       { &ntfs_vnodeop_p, ntfs_vnodeop_entries };
+       { &ntfs_vnode_vops, ntfs_vnodeop_entries };
 
 VNODEOP_SET(ntfs_vnodeop_opv_desc);
 
 #else /* !FreeBSD */
 
 struct vnodeopv_entry_desc ntfs_vnodeop_entries[] = {
-       { &vop_default_desc, (vop_t *) ntfs_bypass },
-       { &vop_lookup_desc, (vop_t *) ntfs_lookup },    /* lookup */
+       { &vop_default_desc, (void *) ntfs_bypass },
+       { &vop_lookup_desc, (void *) ntfs_lookup },     /* lookup */
        { &vop_create_desc, genfs_eopnotsupp },         /* create */
        { &vop_mknod_desc, genfs_eopnotsupp },          /* mknod */
-       { &vop_open_desc, (vop_t *) ntfs_open },        /* open */
-       { &vop_close_desc,(vop_t *)  ntfs_close },      /* close */
-       { &vop_access_desc, (vop_t *) ntfs_access },    /* access */
-       { &vop_getattr_desc, (vop_t *) ntfs_getattr },  /* getattr */
+       { &vop_open_desc, (void *) ntfs_open },         /* open */
+       { &vop_close_desc,(void *)  ntfs_close },       /* close */
+       { &vop_access_des