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>