Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Oct 2008 21:07:28 +0200
From:      Ed Schouten <ed@80386.nl>
To:        FreeBSD FS <freebsd-fs@freebsd.org>, FreeBSD Arch <freebsd-arch@freebsd.org>
Cc:        Jille Timmermans <jille@quis.cx>, Mark van Cuijk <mark@van-cuijk.nl>
Subject:   Re: Expanding vops in vop_vectors during startup
Message-ID:  <20081001190728.GL16837@hoeg.nl>
In-Reply-To: <20080912182722.GK1191@hoeg.nl>
References:  <20080912182722.GK1191@hoeg.nl>

next in thread | previous in thread | raw e-mail | index | archive | help

--egxrhndXibJAPJ54
Content-Type: multipart/mixed; boundary="vTUhhhdwRI43FzeR"
Content-Disposition: inline


--vTUhhhdwRI43FzeR
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Hello everyone,

* Ed Schouten <ed@80386.nl> wrote:
> Yesterday I was talking with some friends of mine about the FreeBSD VFS
> layer. As an exercise, Jille was trying to patch nullfs to hide .svn
> directories (see hackers@), so that's how we got to the subject.
>=20
> After talking about the way our vop_vector works (vop_bypass and
> vop_default), we were wondering why we don't propagate all pointers in
> the vop_vector to its children to save the unneeded function pointer
> resolving inside the VOP_* calls.
>=20
> <snip>

The reason I'm sending this message, is because based on discussions I
had with several people on IRC we've basically got two different
opinions on this patch:

- One group of people liked the idea of the patch. Some people even said
  the patch looks good enough to be committed.

- Another group of people also liked the idea, but thought it would make
  no sense to commit it, because it's not like it's a bottleneck right
  now. It should only be committed if an increase in performance is
  notable.

I did some tests with the patch set, by running tens of millions of
fstat(), fchown(), etc. calls to see how performance was affected. It
turns out on a kernel without any debugging options enabled, the
performance gain is only 1-2%, which sounds pretty valid to me.

It's not much, so because there are objections I've decided not to
commit it. This doesn't make a lot of sense to me, because the patch is
already there. It's just a matter of punching in `svn commit'.

I'm attaching the latest version of the patch to this email message, so
if someone else would like to pick this up: be my guest. Be sure to buy
a bucket of paint before doing so.

--=20
 Ed Schouten <ed@80386.nl>
 WWW: http://80386.nl/

--vTUhhhdwRI43FzeR
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="vnode-vop-expand.diff"
Content-Transfer-Encoding: quoted-printable

Index: sys/nfsclient/nfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/nfsclient/nfs_vnops.c	(revision 182995)
+++ sys/nfsclient/nfs_vnops.c	(working copy)
@@ -134,7 +134,6 @@
  * Global vfs data structures for nfs
  */
 struct vop_vector nfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
 	.vop_access =3D		nfs_access,
 	.vop_advlock =3D		nfs_advlock,
 	.vop_advlockasync =3D	nfs_advlockasync,
@@ -164,6 +163,7 @@
 	.vop_symlink =3D		nfs_symlink,
 	.vop_write =3D		nfs_write,
 };
+DECLARE_VOP_VECTOR(nfs_vnodeops);
=20
 struct vop_vector nfs_fifoops =3D {
 	.vop_default =3D		&fifo_specops,
@@ -178,6 +178,7 @@
 	.vop_setattr =3D		nfs_setattr,
 	.vop_write =3D		nfsfifo_write,
 };
+DECLARE_VOP_VECTOR(nfs_fifoops);
=20
 static int	nfs_mknodrpc(struct vnode *dvp, struct vnode **vpp,
 			     struct componentname *cnp, struct vattr *vap);
Index: sys/gnu/fs/xfs/FreeBSD/xfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/gnu/fs/xfs/FreeBSD/xfs_vnops.c	(revision 182995)
+++ sys/gnu/fs/xfs/FreeBSD/xfs_vnops.c	(working copy)
@@ -118,7 +118,6 @@
 static vop_vptofh_t		_xfs_vptofh;
=20
 struct vop_vector xfs_vnops =3D {
-	.vop_default =3D		&default_vnodeops,
 	.vop_access =3D		_xfs_access,
 	.vop_advlock =3D		_xfs_advlock,
 	.vop_bmap =3D		_xfs_bmap,
@@ -151,6 +150,7 @@
 	.vop_write =3D		_xfs_write,
 	.vop_vptofh =3D		_xfs_vptofh,
 };
+DECLARE_VOP_VECTOR(xfs_vnops);
=20
 /*
  *  FIFO's specific operations.
Index: sys/gnu/fs/reiserfs/reiserfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/gnu/fs/reiserfs/reiserfs_vnops.c	(revision 182995)
+++ sys/gnu/fs/reiserfs/reiserfs_vnops.c	(working copy)
@@ -20,8 +20,6 @@
=20
 /* Global vfs data structures for ReiserFS */
 struct vop_vector reiserfs_vnodeops =3D {
-	.vop_default      =3D &default_vnodeops,
-
 	.vop_access       =3D reiserfs_access,
 	.vop_bmap         =3D reiserfs_bmap,
 	.vop_cachedlookup =3D reiserfs_lookup,
@@ -37,15 +35,15 @@
 	.vop_strategy     =3D reiserfs_strategy,
 	.vop_vptofh       =3D reiserfs_vptofh,
 };
+DECLARE_VOP_VECTOR(reiserfs_vnodeops);
=20
 struct vop_vector reiserfs_specops =3D {
-	.vop_default  =3D &default_vnodeops,
-
 	.vop_access   =3D reiserfs_access,
 	.vop_getattr  =3D reiserfs_getattr,
 	.vop_inactive =3D reiserfs_inactive,
 	.vop_reclaim  =3D reiserfs_reclaim,
 };
+DECLARE_VOP_VECTOR(reiserfs_specops);
=20
 /* -------------------------------------------------------------------
  * vnode operations
Index: sys/gnu/fs/ext2fs/ext2_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/gnu/fs/ext2fs/ext2_vnops.c	(revision 182995)
+++ sys/gnu/fs/ext2fs/ext2_vnops.c	(working copy)
@@ -116,7 +116,6 @@
=20
 /* Global vfs data structures for ext2. */
 struct vop_vector ext2_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
 	.vop_access =3D		ext2_access,
 	.vop_bmap =3D		ext2_bmap,
 	.vop_cachedlookup =3D	ext2_lookup,
@@ -148,9 +147,9 @@
 	.vop_write =3D		ext2_write,
 	.vop_vptofh =3D		ext2_vptofh,
 };
+DECLARE_VOP_VECTOR(ext2_vnodeops);
=20
 struct vop_vector ext2_fifoops =3D {
-	.vop_default =3D		&fifo_specops,
 	.vop_access =3D		ext2_access,
 	.vop_close =3D		ext2fifo_close,
 	.vop_fsync =3D		ext2_fsync,
@@ -164,6 +163,7 @@
 	.vop_write =3D		VOP_PANIC,
 	.vop_vptofh =3D		ext2_vptofh,
 };
+DECLARE_VOP_VECTOR(ext2_fifoops);
=20
 #include <gnu/fs/ext2fs/ext2_readwrite.c>
=20
Index: sys/ufs/ufs/ufs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/ufs/ufs/ufs_vnops.c	(revision 182995)
+++ sys/ufs/ufs/ufs_vnops.c	(working copy)
@@ -2446,7 +2446,6 @@
=20
 /* Global vfs data structures for ufs. */
 struct vop_vector ufs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
 	.vop_fsync =3D		VOP_PANIC,
 	.vop_read =3D		VOP_PANIC,
 	.vop_reallocblks =3D	VOP_PANIC,
@@ -2490,6 +2489,7 @@
 	.vop_aclcheck =3D		ufs_aclcheck,
 #endif
 };
+DECLARE_VOP_VECTOR(ufs_vnodeops);
=20
 struct vop_vector ufs_fifoops =3D {
 	.vop_default =3D		&fifo_specops,
@@ -2518,3 +2518,4 @@
 	.vop_aclcheck =3D		ufs_aclcheck,
 #endif
 };
+DECLARE_VOP_VECTOR(ufs_fifoops);
Index: sys/ufs/ffs/ffs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/ufs/ffs/ffs_vnops.c	(revision 182995)
+++ sys/ufs/ffs/ffs_vnops.c	(working copy)
@@ -132,6 +132,7 @@
 	.vop_write =3D		ffs_write,
 	.vop_vptofh =3D		ffs_vptofh,
 };
+DECLARE_VOP_VECTOR(ffs_vnodeops1);
=20
 struct vop_vector ffs_fifoops1 =3D {
 	.vop_default =3D		&ufs_fifoops,
@@ -139,6 +140,7 @@
 	.vop_reallocblks =3D	ffs_reallocblks, /* XXX: really ??? */
 	.vop_vptofh =3D		ffs_vptofh,
 };
+DECLARE_VOP_VECTOR(ffs_fifoops1);
=20
 /* Global vfs data structures for ufs. */
 struct vop_vector ffs_vnodeops2 =3D {
@@ -157,6 +159,7 @@
 	.vop_setextattr =3D	ffs_setextattr,
 	.vop_vptofh =3D		ffs_vptofh,
 };
+DECLARE_VOP_VECTOR(ffs_vnodeops2);
=20
 struct vop_vector ffs_fifoops2 =3D {
 	.vop_default =3D		&ufs_fifoops,
@@ -172,6 +175,7 @@
 	.vop_setextattr =3D	ffs_setextattr,
 	.vop_vptofh =3D		ffs_vptofh,
 };
+DECLARE_VOP_VECTOR(ffs_fifoops2);
=20
 /*
  * Synch an open file.
Index: sys/kern/uipc_mqueue.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/kern/uipc_mqueue.c	(revision 182995)
+++ sys/kern/uipc_mqueue.c	(working copy)
@@ -2477,7 +2477,6 @@
 };
=20
 static struct vop_vector mqfs_vnodeops =3D {
-	.vop_default 		=3D &default_vnodeops,
 	.vop_access		=3D mqfs_access,
 	.vop_cachedlookup	=3D mqfs_lookup,
 	.vop_lookup		=3D vfs_cache_lookup,
@@ -2495,6 +2494,7 @@
 	.vop_mkdir		=3D VOP_EOPNOTSUPP,
 	.vop_rmdir		=3D VOP_EOPNOTSUPP
 };
+DECLARE_VOP_VECTOR(mqfs_vnodeops);
=20
 static struct vfsops mqfs_vfsops =3D {
 	.vfs_init 		=3D mqfs_init,
Index: sys/kern/vfs_default.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/kern/vfs_default.c	(revision 182995)
+++ sys/kern/vfs_default.c	(working copy)
@@ -72,10 +72,7 @@
  *
  */
=20
-struct vop_vector default_vnodeops =3D {
-	.vop_default =3D		NULL,
-	.vop_bypass =3D		VOP_EOPNOTSUPP,
-
+static struct vop_vector default_vnodeops =3D {
 	.vop_advlock =3D		vop_stdadvlock,
 	.vop_advlockasync =3D	vop_stdadvlockasync,
 	.vop_bmap =3D		vop_stdbmap,
@@ -102,6 +99,50 @@
 };
=20
 /*
+ * A generic routine to inherit missing routines in vop_vectors from
+ * their vop_default or vop_bypass routines. This routine shall be
+ * called on all vop_vectors on startup, which means we can always
+ * assume existing routines are referenced.
+ */
+
+void
+vop_vector_init(void *arg)
+{
+	struct vop_vector *vop =3D arg, *dvop;
+	vop_bypass_t **vlist, **dvlist;
+	unsigned int i;
+
+	/*
+	 * Set vop->vop_default to &default_vnodeops to indicate that
+	 * the vop_vector has already been processed. This saves some
+	 * unneeded traversing of the vectors.
+	 */
+	dvop =3D vop->vop_default;
+	if (dvop =3D=3D &default_vnodeops)
+		return;
+	vop->vop_default =3D &default_vnodeops;
+
+	if (dvop !=3D NULL)
+		vop_vector_init(dvop);
+	else
+		dvop =3D &default_vnodeops;
+
+	vlist =3D _VOP_VECTOR_ARRAY(vop);
+	dvlist =3D _VOP_VECTOR_ARRAY(dvop);
+
+	for (i =3D 0; i < _VOP_VECTOR_COUNT; i++) {
+		if (vlist[i] =3D=3D NULL) {
+			if (vop->vop_bypass !=3D NULL)
+				vlist[i] =3D vop->vop_bypass;
+			else if (dvlist[i] !=3D NULL)
+				vlist[i] =3D dvlist[i];
+			else
+				vlist[i] =3D VOP_EOPNOTSUPP;
+		}
+	}
+}
+
+/*
  * Series of placeholder functions for various error returns for
  * VOPs.
  */
Index: sys/kern/vfs_subr.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/kern/vfs_subr.c	(revision 182995)
+++ sys/kern/vfs_subr.c	(working copy)
@@ -3262,7 +3262,6 @@
 static int	sync_reclaim(struct  vop_reclaim_args *);
=20
 static struct vop_vector sync_vnodeops =3D {
-	.vop_bypass =3D	VOP_EOPNOTSUPP,
 	.vop_close =3D	sync_close,		/* close */
 	.vop_fsync =3D	sync_fsync,		/* fsync */
 	.vop_inactive =3D	sync_inactive,	/* inactive */
@@ -3271,6 +3270,7 @@
 	.vop_unlock =3D	vop_stdunlock,	/* unlock */
 	.vop_islocked =3D	vop_stdislocked,	/* islocked */
 };
+DECLARE_VOP_VECTOR(sync_vnodeops);
=20
 /*
  * Create a new filesystem syncer vnode for the specified mount point.
Index: sys/tools/vnode_if.awk
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/tools/vnode_if.awk	(revision 182995)
+++ sys/tools/vnode_if.awk	(working copy)
@@ -290,6 +290,10 @@
 		ctrstr =3D ctrstr ", a->a_" args[i];
 	ctrstr =3D ctrstr ");";
=20
+	numvops++;
+	if (!firstvop)
+		firstvop =3D name;
+
 	if (pfile) {
 		printp("\t"name"_t\t*"name";")
 	}
@@ -366,17 +370,11 @@
 		printc("");
 		printc("\tVNASSERT(a->a_gen.a_desc =3D=3D &" name "_desc, a->a_" args[0]=
",");
 		printc("\t    (\"Wrong a_desc in " name "(%p, %p)\", a->a_" args[0]", a)=
);");
-		printc("\twhile(vop !=3D NULL && \\");
-		printc("\t    vop->"name" =3D=3D NULL && vop->vop_bypass =3D=3D NULL)")
-		printc("\t\tvop =3D vop->vop_default;")
-		printc("\tVNASSERT(vop !=3D NULL, a->a_" args[0]", (\"No "name"(%p, %p)\=
", a->a_" args[0]", a));")
+		printc("\tVNASSERT(vop->"name" !=3D NULL, a->a_" args[0]", (\"No "name"(=
%p, %p)\", a->a_" args[0]", a));")
 		for (i =3D 0; i < numargs; ++i)
 			add_debug_code(name, args[i], "Entry", "\t");
 		add_pre(name);
-		printc("\tif (vop->"name" !=3D NULL)")
-		printc("\t\trc =3D vop->"name"(a);")
-		printc("\telse")
-		printc("\t\trc =3D vop->vop_bypass(&a->a_gen);")
+		printc("\trc =3D vop->"name"(a);")
 		printc(ctrstr);
 		printc("\tif (rc =3D=3D 0) {");
 		for (i =3D 0; i < numargs; ++i)
@@ -424,7 +422,11 @@
 }
 =20
 if (pfile)
-	printp("};")
+	printp("};\n" \
+	    "\n" \
+	    "#define\t_VOP_VECTOR_COUNT\t"numvops"\n" \
+	    "#define\t_VOP_VECTOR_ARRAY(vop) \\\n" \
+	    "\t(vop_bypass_t **)((void *)&(vop)->"firstvop")")
 =20
 if (hfile)
 	close(hfile);
Index: sys/fs/unionfs/union_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/unionfs/union_vnops.c	(revision 182995)
+++ sys/fs/unionfs/union_vnops.c	(working copy)
@@ -2278,8 +2278,6 @@
 }
=20
 struct vop_vector unionfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		unionfs_access,
 	.vop_aclcheck =3D		unionfs_aclcheck,
 	.vop_advlock =3D		unionfs_advlock,
@@ -2326,3 +2324,4 @@
 	.vop_write =3D		unionfs_write,
 	.vop_vptofh =3D		unionfs_vptofh,
 };
+DECLARE_VOP_VECTOR(unionfs_vnodeops);
Index: sys/fs/deadfs/dead_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/deadfs/dead_vnops.c	(revision 182995)
+++ sys/fs/deadfs/dead_vnops.c	(working copy)
@@ -52,8 +52,6 @@
 static vop_rename_t	dead_rename;
=20
 struct vop_vector dead_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		VOP_EBADF,
 	.vop_advlock =3D		VOP_EBADF,
 	.vop_bmap =3D		dead_bmap,
@@ -80,6 +78,7 @@
 	.vop_symlink =3D		VOP_PANIC,
 	.vop_write =3D		dead_write,
 };
+DECLARE_VOP_VECTOR(dead_vnodeops);
=20
 /* ARGSUSED */
 static int
Index: sys/fs/pseudofs/pseudofs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/pseudofs/pseudofs_vnops.c	(revision 182995)
+++ sys/fs/pseudofs/pseudofs_vnops.c	(working copy)
@@ -864,8 +864,6 @@
  * Vnode operations
  */
 struct vop_vector pfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		pfs_access,
 	.vop_cachedlookup =3D	pfs_lookup,
 	.vop_close =3D		pfs_close,
@@ -890,3 +888,4 @@
 	.vop_write =3D		pfs_write,
 	/* XXX I've probably forgotten a few that need VOP_EOPNOTSUPP */
 };
+DECLARE_VOP_VECTOR(pfs_vnodeops);
Index: sys/fs/tmpfs/tmpfs_fifoops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/tmpfs/tmpfs_fifoops.c	(revision 182995)
+++ sys/fs/tmpfs/tmpfs_fifoops.c	(working copy)
@@ -37,6 +37,7 @@
  __FBSDID("$FreeBSD$");
=20
 #include <sys/param.h>
+#include <sys/kernel.h>
 #include <sys/filedesc.h>
 #include <sys/proc.h>
 #include <sys/vnode.h>
@@ -88,7 +89,6 @@
  * vnode operations vector used for fifos stored in a tmpfs file system.
  */
 struct vop_vector tmpfs_fifoop_entries =3D {
-	.vop_default =3D			&fifo_specops,
 	.vop_close =3D			tmpfs_fifo_close,
 	.vop_reclaim =3D			tmpfs_reclaim,
 	.vop_access =3D			tmpfs_access,
@@ -96,4 +96,4 @@
 	.vop_setattr =3D			tmpfs_setattr,
 	.vop_kqfilter =3D			tmpfs_fifo_kqfilter,
 };
-
+DECLARE_VOP_VECTOR(tmpfs_fifoop_entries);
Index: sys/fs/tmpfs/tmpfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/tmpfs/tmpfs_vnops.c	(revision 182995)
+++ sys/fs/tmpfs/tmpfs_vnops.c	(working copy)
@@ -38,6 +38,7 @@
=20
 #include <sys/param.h>
 #include <sys/fcntl.h>
+#include <sys/kernel.h>
 #include <sys/lockf.h>
 #include <sys/namei.h>
 #include <sys/priv.h>
@@ -1443,7 +1444,6 @@
  * vnode operations vector used for files stored in a tmpfs file system.
  */
 struct vop_vector tmpfs_vnodeop_entries =3D {
-	.vop_default =3D			&default_vnodeops,
 	.vop_lookup =3D			vfs_cache_lookup,
 	.vop_cachedlookup =3D		tmpfs_lookup,
 	.vop_create =3D			tmpfs_create,
@@ -1471,4 +1471,4 @@
 	.vop_vptofh =3D			tmpfs_vptofh,
 	.vop_bmap =3D			VOP_EOPNOTSUPP,
 };
-
+DECLARE_VOP_VECTOR(tmpfs_vnodeop_entries);
Index: sys/fs/portalfs/portal_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/portalfs/portal_vnops.c	(revision 182995)
+++ sys/fs/portalfs/portal_vnops.c	(working copy)
@@ -551,8 +551,6 @@
 }
=20
 struct vop_vector portal_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		VOP_NULL,
 	.vop_getattr =3D		portal_getattr,
 	.vop_lookup =3D		portal_lookup,
@@ -562,3 +560,4 @@
 	.vop_reclaim =3D		portal_reclaim,
 	.vop_setattr =3D		portal_setattr,
 };
+DECLARE_VOP_VECTOR(portal_vnodeops);
Index: sys/fs/hpfs/hpfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/hpfs/hpfs_vnops.c	(revision 182995)
+++ sys/fs/hpfs/hpfs_vnops.c	(working copy)
@@ -1230,8 +1230,6 @@
  * Global vfs data structures
  */
 struct vop_vector hpfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		hpfs_access,
 	.vop_bmap =3D		hpfs_bmap,
 	.vop_cachedlookup =3D	hpfs_lookup,
@@ -1254,3 +1252,4 @@
 	.vop_write =3D		hpfs_write,
 	.vop_vptofh =3D		hpfs_vptofh,
 };
+DECLARE_VOP_VECTOR(hpfs_vnodeops);
Index: sys/fs/nullfs/null_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/nullfs/null_vnops.c	(revision 182995)
+++ sys/fs/nullfs/null_vnops.c	(working copy)
@@ -747,3 +747,4 @@
 	.vop_unlock =3D		null_unlock,
 	.vop_vptofh =3D		null_vptofh,
 };
+DECLARE_VOP_VECTOR(null_vnodeops);
Index: sys/fs/coda/coda_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/coda/coda_vnops.c	(revision 182995)
+++ sys/fs/coda/coda_vnops.c	(working copy)
@@ -110,7 +110,6 @@
  * Definition of the vnode operation vector.
  */
 struct vop_vector coda_vnodeops =3D {
-	.vop_default =3D &default_vnodeops,
 	.vop_cachedlookup =3D coda_lookup,	/* uncached lookup */
 	.vop_lookup =3D vfs_cache_lookup,		/* namecache lookup */
 	.vop_create =3D coda_create,		/* create */
@@ -150,6 +149,7 @@
 #endif
=20
 };
+DECLARE_VOP_VECTOR(coda_vnodeops);
=20
 static void	coda_print_vattr(struct vattr *attr);
=20
Index: sys/fs/devfs/devfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/devfs/devfs_vnops.c	(revision 182995)
+++ sys/fs/devfs/devfs_vnops.c	(working copy)
@@ -1432,8 +1432,6 @@
 };
=20
 static struct vop_vector devfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		devfs_access,
 	.vop_getattr =3D		devfs_getattr,
 	.vop_ioctl =3D		devfs_rioctl,
@@ -1452,10 +1450,9 @@
 #endif
 	.vop_symlink =3D		devfs_symlink,
 };
+DECLARE_VOP_VECTOR(devfs_vnodeops);
=20
 static struct vop_vector devfs_specops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		devfs_access,
 	.vop_advlock =3D		devfs_advlock,
 	.vop_bmap =3D		VOP_PANIC,
@@ -1487,6 +1484,7 @@
 	.vop_symlink =3D		VOP_PANIC,
 	.vop_write =3D		VOP_PANIC,
 };
+DECLARE_VOP_VECTOR(devfs_specops);
=20
 /*
  * Our calling convention to the device drivers used to be that we passed
Index: sys/fs/smbfs/smbfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/smbfs/smbfs_vnops.c	(revision 182995)
+++ sys/fs/smbfs/smbfs_vnops.c	(working copy)
@@ -86,8 +86,6 @@
 static vop_getextattr_t	smbfs_getextattr;
=20
 struct vop_vector smbfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		smbfs_access,
 	.vop_advlock =3D		smbfs_advlock,
 	.vop_close =3D		smbfs_close,
@@ -118,6 +116,7 @@
 	.vop_symlink =3D		smbfs_symlink,
 	.vop_write =3D		smbfs_write,
 };
+DECLARE_VOP_VECTOR(smbfs_vnodeops);
=20
 static int
 smbfs_access(ap)
Index: sys/fs/ntfs/ntfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/ntfs/ntfs_vnops.c	(revision 182995)
+++ sys/fs/ntfs/ntfs_vnops.c	(working copy)
@@ -756,8 +756,6 @@
  * Global vfs data structures
  */
 struct vop_vector ntfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		ntfs_access,
 	.vop_bmap =3D		ntfs_bmap,
 	.vop_cachedlookup =3D	ntfs_lookup,
@@ -775,3 +773,4 @@
 	.vop_write =3D		ntfs_write,
 	.vop_vptofh =3D		ntfs_vptofh,
 };
+DECLARE_VOP_VECTOR(ntfs_vnodeops);
Index: sys/fs/cd9660/cd9660_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/cd9660/cd9660_vnops.c	(revision 182995)
+++ sys/fs/cd9660/cd9660_vnops.c	(working copy)
@@ -827,7 +827,6 @@
  * Global vfs data structures for cd9660
  */
 struct vop_vector cd9660_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
 	.vop_open =3D		cd9660_open,
 	.vop_access =3D		cd9660_access,
 	.vop_bmap =3D		cd9660_bmap,
@@ -845,6 +844,7 @@
 	.vop_strategy =3D		cd9660_strategy,
 	.vop_vptofh =3D		cd9660_vptofh,
 };
+DECLARE_VOP_VECTOR(cd9660_vnodeops);
=20
 /*
  * Special device vnode ops
@@ -859,3 +859,4 @@
 	.vop_setattr =3D		cd9660_setattr,
 	.vop_vptofh =3D		cd9660_vptofh,
 };
+DECLARE_VOP_VECTOR(cd9660_fifoops);
Index: sys/fs/fifofs/fifo_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/fifofs/fifo_vnops.c	(revision 182995)
+++ sys/fs/fifofs/fifo_vnops.c	(working copy)
@@ -109,8 +109,6 @@
 	{ 1, NULL, filt_fifodetach_notsup, filt_fifo_notsup };
=20
 struct vop_vector fifo_specops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		VOP_EBADF,
 	.vop_advlock =3D		fifo_advlock,
 	.vop_close =3D		fifo_close,
@@ -137,6 +135,7 @@
 	.vop_symlink =3D		VOP_PANIC,
 	.vop_write =3D		VOP_PANIC,
 };
+DECLARE_VOP_VECTOR(fifo_specops);
=20
 struct mtx fifo_mtx;
 MTX_SYSINIT(fifo, &fifo_mtx, "fifo mutex", MTX_DEF);
Index: sys/fs/fdescfs/fdesc_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/fdescfs/fdesc_vnops.c	(revision 182995)
+++ sys/fs/fdescfs/fdesc_vnops.c	(working copy)
@@ -72,8 +72,6 @@
 static vop_setattr_t	fdesc_setattr;
=20
 static struct vop_vector fdesc_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		VOP_NULL,
 	.vop_getattr =3D		fdesc_getattr,
 	.vop_lookup =3D		fdesc_lookup,
@@ -83,6 +81,7 @@
 	.vop_reclaim =3D		fdesc_reclaim,
 	.vop_setattr =3D		fdesc_setattr,
 };
+DECLARE_VOP_VECTOR(fdesc_vnodeops);
=20
 static void fdesc_insmntque_dtr(struct vnode *, void *);
 static void fdesc_remove_entry(struct fdescnode *);
Index: sys/fs/nwfs/nwfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/nwfs/nwfs_vnops.c	(revision 182995)
+++ sys/fs/nwfs/nwfs_vnops.c	(working copy)
@@ -84,8 +84,6 @@
=20
 /* Global vfs data structures for nwfs */
 struct vop_vector nwfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		nwfs_access,
 	.vop_close =3D		nwfs_close,
 	.vop_create =3D		nwfs_create,
@@ -113,6 +111,7 @@
 	.vop_symlink =3D		nwfs_symlink,
 	.vop_write =3D		nwfs_write,
 };
+DECLARE_VOP_VECTOR(nwfs_vnodeops);
=20
 /*
  * nwfs_access vnode op
Index: sys/fs/msdosfs/msdosfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/msdosfs/msdosfs_vnops.c	(revision 182995)
+++ sys/fs/msdosfs/msdosfs_vnops.c	(working copy)
@@ -54,6 +54,7 @@
 #include <sys/buf.h>
 #include <sys/clock.h>
 #include <sys/dirent.h>
+#include <sys/kernel.h>
 #include <sys/lock.h>
 #include <sys/lockf.h>
 #include <sys/malloc.h>
@@ -1965,8 +1966,6 @@
=20
 /* Global vfs data structures for msdosfs */
 struct vop_vector msdosfs_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		msdosfs_access,
 	.vop_bmap =3D		msdosfs_bmap,
 	.vop_cachedlookup =3D	msdosfs_lookup,
@@ -1994,3 +1993,4 @@
 	.vop_write =3D		msdosfs_write,
 	.vop_vptofh =3D		msdosfs_vptofh,
 };
+DECLARE_VOP_VECTOR(msdosfs_vnodeops);
Index: sys/fs/udf/udf_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/fs/udf/udf_vnops.c	(revision 182995)
+++ sys/fs/udf/udf_vnops.c	(working copy)
@@ -74,8 +74,6 @@
     daddr_t *sector, uint32_t *max_size);
=20
 static struct vop_vector udf_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
-
 	.vop_access =3D		udf_access,
 	.vop_bmap =3D		udf_bmap,
 	.vop_cachedlookup =3D	udf_lookup,
@@ -91,6 +89,7 @@
 	.vop_strategy =3D		udf_strategy,
 	.vop_vptofh =3D		udf_vptofh,
 };
+DECLARE_VOP_VECTOR(udf_vnodeops);
=20
 MALLOC_DEFINE(M_UDFFID, "udf_fid", "UDF FileId structure");
 MALLOC_DEFINE(M_UDFDS, "udf_ds", "UDF Dirstream structure");
Index: sys/nfs4client/nfs4_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/nfs4client/nfs4_vnops.c	(revision 182995)
+++ sys/nfs4client/nfs4_vnops.c	(working copy)
@@ -162,7 +162,6 @@
  * Global vfs data structures for nfs
  */
 struct vop_vector nfs4_vnodeops =3D {
-	.vop_default =3D		&default_vnodeops,
 	.vop_access =3D		nfs4_access,
 	.vop_advlock =3D		nfs4_advlock,
 	.vop_advlockasync =3D	nfs4_advlockasync,
@@ -192,6 +191,7 @@
 	.vop_symlink =3D		nfs4_symlink,
 	.vop_write =3D		nfs_write,
 };
+DECLARE_VOP_VECTOR(nfs4_vnodeops);
=20
 static int	nfs4_removerpc(struct vnode *dvp, const char *name, int namelen,
 			      struct ucred *cred, struct thread *td);
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	(revision 18=
2995)
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	(working cop=
y)
@@ -3526,7 +3526,6 @@
 struct vop_vector zfs_fifoops;
=20
 struct vop_vector zfs_vnodeops =3D {
-	.vop_default =3D	&default_vnodeops,
 	.vop_inactive =3D	zfs_freebsd_inactive,
 	.vop_reclaim =3D	zfs_freebsd_reclaim,
 	.vop_access =3D	zfs_freebsd_access,
@@ -3558,6 +3557,7 @@
 	.vop_bmap =3D	VOP_EOPNOTSUPP,
 	.vop_fid =3D	zfs_freebsd_fid,
 };
+DECLARE_VOP_VECTOR(zfs_vnodeops);
=20
 struct vop_vector zfs_fifoops =3D {
 	.vop_default =3D	&fifo_specops,
@@ -3571,3 +3571,4 @@
 	.vop_write =3D	VOP_PANIC,
 	.vop_fid =3D	zfs_freebsd_fid,
 };
+DECLARE_VOP_VECTOR(zfs_fifoops);
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c	(revision 1=
82995)
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c	(working co=
py)
@@ -436,7 +436,6 @@
 }
=20
 static struct vop_vector zfsctl_ops_root =3D {
-	.vop_default =3D	&default_vnodeops,
 	.vop_open =3D	zfsctl_common_open,
 	.vop_close =3D	zfsctl_common_close,
 	.vop_ioctl =3D	VOP_EINVAL,
@@ -448,6 +447,7 @@
 	.vop_reclaim =3D	zfsctl_common_reclaim,
 	.vop_fid =3D	zfsctl_common_fid,
 };
+DECLARE_VOP_VECTOR(zfsctl_ops_root);
=20
 static int
 zfsctl_snapshot_zname(vnode_t *vp, const char *name, int len, char *zname)
@@ -840,7 +840,6 @@
 }
=20
 static struct vop_vector zfsctl_ops_snapdir =3D {
-	.vop_default =3D	&default_vnodeops,
 	.vop_open =3D	zfsctl_common_open,
 	.vop_close =3D	zfsctl_common_close,
 	.vop_ioctl =3D	VOP_EINVAL,
@@ -852,6 +851,7 @@
 	.vop_reclaim =3D	zfsctl_common_reclaim,
 	.vop_fid =3D	zfsctl_common_fid,
 };
+DECLARE_VOP_VECTOR(zfsctl_ops_snapdir);
=20
 static vnode_t *
 zfsctl_snapshot_mknode(vnode_t *pvp, uint64_t objset)
@@ -987,12 +987,12 @@
  * be covered.
  */
 static struct vop_vector zfsctl_ops_snapshot =3D {
-	.vop_default =3D	&default_vnodeops,
 	.vop_inactive =3D	zfsctl_snapshot_inactive,
 	.vop_reclaim =3D	zfsctl_common_reclaim,
 	.vop_getattr =3D	zfsctl_snapshot_getattr,
 	.vop_fid =3D	zfsctl_snapshot_fid,
 };
+DECLARE_VOP_VECTOR(zfsctl_ops_snapshot);
=20
 int
 zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp)
Index: sys/sys/vnode.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/sys/vnode.h	(revision 182995)
+++ sys/sys/vnode.h	(working copy)
@@ -718,8 +718,11 @@
=20
 extern struct vop_vector fifo_specops;
 extern struct vop_vector dead_vnodeops;
-extern struct vop_vector default_vnodeops;
=20
+void vop_vector_init(void *arg);
+#define	DECLARE_VOP_VECTOR(name) \
+	SYSINIT(name, SI_SUB_VFS, SI_ORDER_ANY, vop_vector_init, &name)
+
 #define VOP_PANIC	((void*)(uintptr_t)vop_panic)
 #define VOP_NULL	((void*)(uintptr_t)vop_null)
 #define VOP_EBADF	((void*)(uintptr_t)vop_ebadf)

--vTUhhhdwRI43FzeR--

--egxrhndXibJAPJ54
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)

iEYEARECAAYFAkjjynAACgkQ52SDGA2eCwXSCwCeOQlljPRORRZ7th46uy0ZPB7N
u0oAnjYVG7zx0v6S4WZxB+CXI+GgUB9x
=Cd+S
-----END PGP SIGNATURE-----

--egxrhndXibJAPJ54--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20081001190728.GL16837>