Home | History | Annotate | Line # | Download | only in kern
vnode_if.c revision 1.111
      1  1.109        ad /*	$NetBSD: vnode_if.c,v 1.111 2020/05/16 18:31:50 christos Exp $	*/
      2    1.9   thorpej 
      3    1.1       cgd /*
      4   1.52     perry  * Warning: DO NOT EDIT! This file is automatically generated!
      5    1.1       cgd  * (Modifications made here may easily be lost!)
      6    1.1       cgd  *
      7    1.1       cgd  * Created from the file:
      8  1.109        ad  *	NetBSD: vnode_if.src,v 1.78 2019/10/11 08:04:52 hannken Exp
      9    1.1       cgd  * by the script:
     10  1.110        ad  *	NetBSD: vnode_if.sh,v 1.69 2020/02/23 22:14:04 ad Exp
     11    1.1       cgd  */
     12    1.1       cgd 
     13    1.1       cgd /*
     14   1.10      fvdl  * Copyright (c) 1992, 1993, 1994, 1995
     15    1.1       cgd  *	The Regents of the University of California.  All rights reserved.
     16    1.1       cgd  *
     17    1.1       cgd  * Redistribution and use in source and binary forms, with or without
     18    1.1       cgd  * modification, are permitted provided that the following conditions
     19    1.1       cgd  * are met:
     20    1.1       cgd  * 1. Redistributions of source code must retain the above copyright
     21    1.1       cgd  *    notice, this list of conditions and the following disclaimer.
     22    1.1       cgd  * 2. Redistributions in binary form must reproduce the above copyright
     23    1.1       cgd  *    notice, this list of conditions and the following disclaimer in the
     24    1.1       cgd  *    documentation and/or other materials provided with the distribution.
     25   1.45       agc  * 3. Neither the name of the University nor the names of its contributors
     26    1.1       cgd  *    may be used to endorse or promote products derived from this software
     27    1.1       cgd  *    without specific prior written permission.
     28    1.1       cgd  *
     29   1.14  christos  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     30    1.1       cgd  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     31    1.1       cgd  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     32    1.1       cgd  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     33    1.1       cgd  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     34    1.1       cgd  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     35    1.1       cgd  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     36    1.1       cgd  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     37    1.1       cgd  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     38    1.1       cgd  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     39    1.1       cgd  * SUCH DAMAGE.
     40    1.1       cgd  */
     41   1.39     lukem 
     42   1.39     lukem #include <sys/cdefs.h>
     43  1.109        ad __KERNEL_RCSID(0, "$NetBSD: vnode_if.c,v 1.111 2020/05/16 18:31:50 christos Exp $");
     44   1.39     lukem 
     45    1.1       cgd #include <sys/param.h>
     46    1.1       cgd #include <sys/mount.h>
     47   1.23   thorpej #include <sys/buf.h>
     48    1.1       cgd #include <sys/vnode.h>
     49   1.72        ad #include <sys/lock.h>
     50   1.97   hannken #include <sys/fstrans.h>
     51    1.1       cgd 
     52  1.108   hannken enum fst_op { FST_NO, FST_YES, FST_LAZY, FST_TRY };
     53  1.105   hannken 
     54  1.105   hannken static inline int
     55  1.105   hannken vop_pre(vnode_t *vp, struct mount **mp, bool *mpsafe, enum fst_op op)
     56  1.105   hannken {
     57  1.105   hannken 	int error;
     58  1.105   hannken 
     59  1.105   hannken 	*mpsafe = (vp->v_vflag & VV_MPSAFE);
     60  1.105   hannken 
     61  1.105   hannken 	if (!*mpsafe) {
     62  1.105   hannken 		KERNEL_LOCK(1, curlwp);
     63  1.105   hannken 	}
     64  1.105   hannken 
     65  1.108   hannken 	if (op == FST_YES || op == FST_LAZY || op == FST_TRY) {
     66  1.105   hannken 		for (;;) {
     67  1.105   hannken 			*mp = vp->v_mount;
     68  1.105   hannken 			if (op == FST_TRY) {
     69  1.106   hannken 				error = fstrans_start_nowait(*mp);
     70  1.105   hannken 				if (error) {
     71  1.105   hannken 					if (!*mpsafe) {
     72  1.105   hannken 						KERNEL_UNLOCK_ONE(curlwp);
     73  1.105   hannken 					}
     74  1.105   hannken 					return error;
     75  1.105   hannken 				}
     76  1.108   hannken 			} else if (op == FST_LAZY) {
     77  1.108   hannken 				fstrans_start_lazy(*mp);
     78  1.105   hannken 			} else {
     79  1.106   hannken 				fstrans_start(*mp);
     80  1.105   hannken 			}
     81  1.105   hannken 			if (__predict_true(*mp == vp->v_mount))
     82  1.105   hannken 				break;
     83  1.105   hannken 			fstrans_done(*mp);
     84  1.105   hannken 		}
     85  1.105   hannken 	} else {
     86  1.105   hannken 		*mp = vp->v_mount;
     87  1.105   hannken 	}
     88  1.105   hannken 
     89  1.105   hannken 	return 0;
     90  1.105   hannken }
     91  1.105   hannken 
     92  1.105   hannken static inline void
     93  1.105   hannken vop_post(vnode_t *vp, struct mount *mp, bool mpsafe, enum fst_op op)
     94  1.105   hannken {
     95  1.105   hannken 
     96  1.108   hannken 	if (op == FST_YES || op == FST_LAZY) {
     97  1.105   hannken 		fstrans_done(mp);
     98  1.105   hannken 	}
     99  1.105   hannken 
    100  1.105   hannken 	if (!mpsafe) {
    101  1.105   hannken 		KERNEL_UNLOCK_ONE(curlwp);
    102  1.105   hannken 	}
    103  1.105   hannken }
    104  1.105   hannken 
    105   1.34     lukem const struct vnodeop_desc vop_default_desc = {
    106    1.1       cgd 	0,
    107    1.1       cgd 	"default",
    108    1.1       cgd 	0,
    109    1.1       cgd 	NULL,
    110    1.1       cgd 	VDESC_NO_OFFSET,
    111    1.1       cgd 	VDESC_NO_OFFSET,
    112    1.1       cgd 	VDESC_NO_OFFSET,
    113    1.1       cgd };
    114    1.1       cgd 
    115    1.1       cgd 
    116   1.33  jdolecek const int vop_bwrite_vp_offsets[] = {
    117   1.88   hannken 	VOPARG_OFFSETOF(struct vop_bwrite_args,a_vp),
    118   1.33  jdolecek 	VDESC_NO_OFFSET
    119   1.33  jdolecek };
    120   1.33  jdolecek const struct vnodeop_desc vop_bwrite_desc = {
    121   1.67     pooka 	VOP_BWRITE_DESCOFFSET,
    122   1.33  jdolecek 	"vop_bwrite",
    123   1.33  jdolecek 	0,
    124   1.33  jdolecek 	vop_bwrite_vp_offsets,
    125   1.33  jdolecek 	VDESC_NO_OFFSET,
    126   1.33  jdolecek 	VDESC_NO_OFFSET,
    127   1.33  jdolecek 	VDESC_NO_OFFSET,
    128   1.33  jdolecek };
    129   1.33  jdolecek int
    130   1.88   hannken VOP_BWRITE(struct vnode *vp,
    131   1.88   hannken     struct buf *bp)
    132   1.33  jdolecek {
    133   1.72        ad 	int error;
    134   1.72        ad 	bool mpsafe;
    135   1.33  jdolecek 	struct vop_bwrite_args a;
    136  1.105   hannken 	struct mount *mp;
    137   1.33  jdolecek 	a.a_desc = VDESC(vop_bwrite);
    138   1.88   hannken 	a.a_vp = vp;
    139   1.33  jdolecek 	a.a_bp = bp;
    140  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    141  1.105   hannken 	if (error)
    142  1.105   hannken 		return error;
    143   1.88   hannken 	error = (VCALL(vp, VOFFSET(vop_bwrite), &a));
    144  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    145   1.72        ad 	return error;
    146   1.33  jdolecek }
    147   1.33  jdolecek 
    148   1.31  jdolecek const int vop_lookup_vp_offsets[] = {
    149   1.92   hannken 	VOPARG_OFFSETOF(struct vop_lookup_v2_args,a_dvp),
    150    1.1       cgd 	VDESC_NO_OFFSET
    151    1.1       cgd };
    152   1.33  jdolecek const struct vnodeop_desc vop_lookup_desc = {
    153   1.67     pooka 	VOP_LOOKUP_DESCOFFSET,
    154    1.1       cgd 	"vop_lookup",
    155    1.1       cgd 	0,
    156    1.1       cgd 	vop_lookup_vp_offsets,
    157   1.92   hannken 	VOPARG_OFFSETOF(struct vop_lookup_v2_args, a_vpp),
    158    1.1       cgd 	VDESC_NO_OFFSET,
    159   1.92   hannken 	VOPARG_OFFSETOF(struct vop_lookup_v2_args, a_cnp),
    160    1.1       cgd };
    161   1.23   thorpej int
    162   1.60   thorpej VOP_LOOKUP(struct vnode *dvp,
    163   1.60   thorpej     struct vnode **vpp,
    164   1.60   thorpej     struct componentname *cnp)
    165   1.23   thorpej {
    166   1.72        ad 	int error;
    167   1.72        ad 	bool mpsafe;
    168   1.92   hannken 	struct vop_lookup_v2_args a;
    169  1.105   hannken 	struct mount *mp;
    170   1.23   thorpej 	a.a_desc = VDESC(vop_lookup);
    171   1.23   thorpej 	a.a_dvp = dvp;
    172   1.23   thorpej 	a.a_vpp = vpp;
    173   1.23   thorpej 	a.a_cnp = cnp;
    174  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
    175  1.105   hannken 	if (error)
    176  1.105   hannken 		return error;
    177   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_lookup), &a));
    178  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
    179   1.69     pooka #ifdef DIAGNOSTIC
    180   1.72        ad 	if (error == 0)
    181   1.69     pooka 		KASSERT((*vpp)->v_size != VSIZENOTSET
    182   1.69     pooka 		    && (*vpp)->v_writesize != VSIZENOTSET);
    183   1.69     pooka #endif /* DIAGNOSTIC */
    184   1.72        ad 	return error;
    185   1.23   thorpej }
    186    1.1       cgd 
    187   1.31  jdolecek const int vop_create_vp_offsets[] = {
    188   1.91   hannken 	VOPARG_OFFSETOF(struct vop_create_v3_args,a_dvp),
    189    1.1       cgd 	VDESC_NO_OFFSET
    190    1.1       cgd };
    191   1.33  jdolecek const struct vnodeop_desc vop_create_desc = {
    192   1.67     pooka 	VOP_CREATE_DESCOFFSET,
    193    1.1       cgd 	"vop_create",
    194   1.90   hannken 	0,
    195    1.1       cgd 	vop_create_vp_offsets,
    196   1.91   hannken 	VOPARG_OFFSETOF(struct vop_create_v3_args, a_vpp),
    197    1.1       cgd 	VDESC_NO_OFFSET,
    198   1.91   hannken 	VOPARG_OFFSETOF(struct vop_create_v3_args, a_cnp),
    199    1.1       cgd };
    200   1.23   thorpej int
    201   1.60   thorpej VOP_CREATE(struct vnode *dvp,
    202   1.60   thorpej     struct vnode **vpp,
    203   1.60   thorpej     struct componentname *cnp,
    204   1.60   thorpej     struct vattr *vap)
    205   1.23   thorpej {
    206   1.72        ad 	int error;
    207   1.72        ad 	bool mpsafe;
    208   1.91   hannken 	struct vop_create_v3_args a;
    209  1.105   hannken 	struct mount *mp;
    210   1.23   thorpej 	a.a_desc = VDESC(vop_create);
    211   1.23   thorpej 	a.a_dvp = dvp;
    212   1.23   thorpej 	a.a_vpp = vpp;
    213   1.23   thorpej 	a.a_cnp = cnp;
    214   1.23   thorpej 	a.a_vap = vap;
    215  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
    216  1.105   hannken 	if (error)
    217  1.105   hannken 		return error;
    218   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_create), &a));
    219  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
    220   1.69     pooka #ifdef DIAGNOSTIC
    221   1.72        ad 	if (error == 0)
    222   1.69     pooka 		KASSERT((*vpp)->v_size != VSIZENOTSET
    223   1.69     pooka 		    && (*vpp)->v_writesize != VSIZENOTSET);
    224   1.69     pooka #endif /* DIAGNOSTIC */
    225   1.72        ad 	return error;
    226   1.23   thorpej }
    227    1.1       cgd 
    228   1.31  jdolecek const int vop_mknod_vp_offsets[] = {
    229   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mknod_v3_args,a_dvp),
    230    1.1       cgd 	VDESC_NO_OFFSET
    231    1.1       cgd };
    232   1.33  jdolecek const struct vnodeop_desc vop_mknod_desc = {
    233   1.67     pooka 	VOP_MKNOD_DESCOFFSET,
    234    1.1       cgd 	"vop_mknod",
    235   1.90   hannken 	0,
    236    1.1       cgd 	vop_mknod_vp_offsets,
    237   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mknod_v3_args, a_vpp),
    238    1.1       cgd 	VDESC_NO_OFFSET,
    239   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mknod_v3_args, a_cnp),
    240    1.1       cgd };
    241   1.23   thorpej int
    242   1.60   thorpej VOP_MKNOD(struct vnode *dvp,
    243   1.60   thorpej     struct vnode **vpp,
    244   1.60   thorpej     struct componentname *cnp,
    245   1.60   thorpej     struct vattr *vap)
    246   1.23   thorpej {
    247   1.72        ad 	int error;
    248   1.72        ad 	bool mpsafe;
    249   1.91   hannken 	struct vop_mknod_v3_args a;
    250  1.105   hannken 	struct mount *mp;
    251   1.23   thorpej 	a.a_desc = VDESC(vop_mknod);
    252   1.23   thorpej 	a.a_dvp = dvp;
    253   1.23   thorpej 	a.a_vpp = vpp;
    254   1.23   thorpej 	a.a_cnp = cnp;
    255   1.23   thorpej 	a.a_vap = vap;
    256  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
    257  1.105   hannken 	if (error)
    258  1.105   hannken 		return error;
    259   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_mknod), &a));
    260  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
    261   1.69     pooka #ifdef DIAGNOSTIC
    262   1.72        ad 	if (error == 0)
    263   1.69     pooka 		KASSERT((*vpp)->v_size != VSIZENOTSET
    264   1.69     pooka 		    && (*vpp)->v_writesize != VSIZENOTSET);
    265   1.69     pooka #endif /* DIAGNOSTIC */
    266   1.72        ad 	return error;
    267   1.23   thorpej }
    268    1.1       cgd 
    269   1.31  jdolecek const int vop_open_vp_offsets[] = {
    270    1.1       cgd 	VOPARG_OFFSETOF(struct vop_open_args,a_vp),
    271    1.1       cgd 	VDESC_NO_OFFSET
    272    1.1       cgd };
    273   1.33  jdolecek const struct vnodeop_desc vop_open_desc = {
    274   1.67     pooka 	VOP_OPEN_DESCOFFSET,
    275    1.1       cgd 	"vop_open",
    276    1.1       cgd 	0,
    277    1.1       cgd 	vop_open_vp_offsets,
    278    1.1       cgd 	VDESC_NO_OFFSET,
    279    1.1       cgd 	VOPARG_OFFSETOF(struct vop_open_args, a_cred),
    280    1.1       cgd 	VDESC_NO_OFFSET,
    281    1.1       cgd };
    282   1.23   thorpej int
    283   1.60   thorpej VOP_OPEN(struct vnode *vp,
    284   1.60   thorpej     int mode,
    285   1.73     pooka     kauth_cred_t cred)
    286   1.23   thorpej {
    287   1.72        ad 	int error;
    288   1.72        ad 	bool mpsafe;
    289   1.23   thorpej 	struct vop_open_args a;
    290  1.105   hannken 	struct mount *mp;
    291   1.23   thorpej 	a.a_desc = VDESC(vop_open);
    292   1.23   thorpej 	a.a_vp = vp;
    293   1.23   thorpej 	a.a_mode = mode;
    294   1.23   thorpej 	a.a_cred = cred;
    295  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    296  1.105   hannken 	if (error)
    297  1.105   hannken 		return error;
    298   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_open), &a));
    299  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    300   1.72        ad 	return error;
    301   1.23   thorpej }
    302    1.1       cgd 
    303   1.31  jdolecek const int vop_close_vp_offsets[] = {
    304    1.1       cgd 	VOPARG_OFFSETOF(struct vop_close_args,a_vp),
    305    1.1       cgd 	VDESC_NO_OFFSET
    306    1.1       cgd };
    307   1.33  jdolecek const struct vnodeop_desc vop_close_desc = {
    308   1.67     pooka 	VOP_CLOSE_DESCOFFSET,
    309    1.1       cgd 	"vop_close",
    310    1.1       cgd 	0,
    311    1.1       cgd 	vop_close_vp_offsets,
    312    1.1       cgd 	VDESC_NO_OFFSET,
    313    1.1       cgd 	VOPARG_OFFSETOF(struct vop_close_args, a_cred),
    314    1.1       cgd 	VDESC_NO_OFFSET,
    315    1.1       cgd };
    316   1.23   thorpej int
    317   1.60   thorpej VOP_CLOSE(struct vnode *vp,
    318   1.60   thorpej     int fflag,
    319   1.73     pooka     kauth_cred_t cred)
    320   1.23   thorpej {
    321   1.72        ad 	int error;
    322   1.72        ad 	bool mpsafe;
    323   1.23   thorpej 	struct vop_close_args a;
    324  1.105   hannken 	struct mount *mp;
    325   1.23   thorpej 	a.a_desc = VDESC(vop_close);
    326   1.23   thorpej 	a.a_vp = vp;
    327   1.23   thorpej 	a.a_fflag = fflag;
    328   1.23   thorpej 	a.a_cred = cred;
    329  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    330  1.105   hannken 	if (error)
    331  1.105   hannken 		return error;
    332   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_close), &a));
    333  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    334   1.72        ad 	return error;
    335   1.23   thorpej }
    336    1.1       cgd 
    337   1.31  jdolecek const int vop_access_vp_offsets[] = {
    338    1.1       cgd 	VOPARG_OFFSETOF(struct vop_access_args,a_vp),
    339    1.1       cgd 	VDESC_NO_OFFSET
    340    1.1       cgd };
    341   1.33  jdolecek const struct vnodeop_desc vop_access_desc = {
    342   1.67     pooka 	VOP_ACCESS_DESCOFFSET,
    343    1.1       cgd 	"vop_access",
    344    1.1       cgd 	0,
    345    1.1       cgd 	vop_access_vp_offsets,
    346    1.1       cgd 	VDESC_NO_OFFSET,
    347    1.1       cgd 	VOPARG_OFFSETOF(struct vop_access_args, a_cred),
    348    1.1       cgd 	VDESC_NO_OFFSET,
    349    1.1       cgd };
    350   1.23   thorpej int
    351   1.60   thorpej VOP_ACCESS(struct vnode *vp,
    352  1.111  christos     accmode_t accmode,
    353   1.73     pooka     kauth_cred_t cred)
    354   1.23   thorpej {
    355   1.72        ad 	int error;
    356   1.72        ad 	bool mpsafe;
    357   1.23   thorpej 	struct vop_access_args a;
    358  1.105   hannken 	struct mount *mp;
    359   1.23   thorpej 	a.a_desc = VDESC(vop_access);
    360   1.23   thorpej 	a.a_vp = vp;
    361  1.111  christos 	a.a_accmode = accmode;
    362   1.23   thorpej 	a.a_cred = cred;
    363  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    364  1.105   hannken 	if (error)
    365  1.105   hannken 		return error;
    366   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_access), &a));
    367  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    368   1.72        ad 	return error;
    369   1.23   thorpej }
    370    1.1       cgd 
    371  1.111  christos const int vop_accessx_vp_offsets[] = {
    372  1.111  christos 	VOPARG_OFFSETOF(struct vop_accessx_args,a_vp),
    373  1.111  christos 	VDESC_NO_OFFSET
    374  1.111  christos };
    375  1.111  christos const struct vnodeop_desc vop_accessx_desc = {
    376  1.111  christos 	VOP_ACCESSX_DESCOFFSET,
    377  1.111  christos 	"vop_accessx",
    378  1.111  christos 	0,
    379  1.111  christos 	vop_accessx_vp_offsets,
    380  1.111  christos 	VDESC_NO_OFFSET,
    381  1.111  christos 	VOPARG_OFFSETOF(struct vop_accessx_args, a_cred),
    382  1.111  christos 	VDESC_NO_OFFSET,
    383  1.111  christos };
    384  1.111  christos int
    385  1.111  christos VOP_ACCESSX(struct vnode *vp,
    386  1.111  christos     accmode_t accmode,
    387  1.111  christos     kauth_cred_t cred)
    388  1.111  christos {
    389  1.111  christos 	int error;
    390  1.111  christos 	bool mpsafe;
    391  1.111  christos 	struct vop_accessx_args a;
    392  1.111  christos 	struct mount *mp;
    393  1.111  christos 	a.a_desc = VDESC(vop_accessx);
    394  1.111  christos 	a.a_vp = vp;
    395  1.111  christos 	a.a_accmode = accmode;
    396  1.111  christos 	a.a_cred = cred;
    397  1.111  christos 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    398  1.111  christos 	if (error)
    399  1.111  christos 		return error;
    400  1.111  christos 	error = (VCALL(vp, VOFFSET(vop_accessx), &a));
    401  1.111  christos 	vop_post(vp, mp, mpsafe, FST_NO);
    402  1.111  christos 	return error;
    403  1.111  christos }
    404  1.111  christos 
    405   1.31  jdolecek const int vop_getattr_vp_offsets[] = {
    406    1.1       cgd 	VOPARG_OFFSETOF(struct vop_getattr_args,a_vp),
    407    1.1       cgd 	VDESC_NO_OFFSET
    408    1.1       cgd };
    409   1.33  jdolecek const struct vnodeop_desc vop_getattr_desc = {
    410   1.67     pooka 	VOP_GETATTR_DESCOFFSET,
    411    1.1       cgd 	"vop_getattr",
    412    1.1       cgd 	0,
    413    1.1       cgd 	vop_getattr_vp_offsets,
    414    1.1       cgd 	VDESC_NO_OFFSET,
    415    1.1       cgd 	VOPARG_OFFSETOF(struct vop_getattr_args, a_cred),
    416    1.1       cgd 	VDESC_NO_OFFSET,
    417    1.1       cgd };
    418   1.23   thorpej int
    419   1.60   thorpej VOP_GETATTR(struct vnode *vp,
    420   1.60   thorpej     struct vattr *vap,
    421   1.73     pooka     kauth_cred_t cred)
    422   1.23   thorpej {
    423   1.72        ad 	int error;
    424   1.72        ad 	bool mpsafe;
    425   1.23   thorpej 	struct vop_getattr_args a;
    426  1.105   hannken 	struct mount *mp;
    427   1.23   thorpej 	a.a_desc = VDESC(vop_getattr);
    428   1.23   thorpej 	a.a_vp = vp;
    429   1.23   thorpej 	a.a_vap = vap;
    430   1.23   thorpej 	a.a_cred = cred;
    431  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    432  1.105   hannken 	if (error)
    433  1.105   hannken 		return error;
    434   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_getattr), &a));
    435  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    436   1.72        ad 	return error;
    437   1.23   thorpej }
    438    1.1       cgd 
    439   1.31  jdolecek const int vop_setattr_vp_offsets[] = {
    440    1.1       cgd 	VOPARG_OFFSETOF(struct vop_setattr_args,a_vp),
    441    1.1       cgd 	VDESC_NO_OFFSET
    442    1.1       cgd };
    443   1.33  jdolecek const struct vnodeop_desc vop_setattr_desc = {
    444   1.67     pooka 	VOP_SETATTR_DESCOFFSET,
    445    1.1       cgd 	"vop_setattr",
    446    1.1       cgd 	0,
    447    1.1       cgd 	vop_setattr_vp_offsets,
    448    1.1       cgd 	VDESC_NO_OFFSET,
    449    1.1       cgd 	VOPARG_OFFSETOF(struct vop_setattr_args, a_cred),
    450    1.1       cgd 	VDESC_NO_OFFSET,
    451    1.1       cgd };
    452   1.23   thorpej int
    453   1.60   thorpej VOP_SETATTR(struct vnode *vp,
    454   1.60   thorpej     struct vattr *vap,
    455   1.73     pooka     kauth_cred_t cred)
    456   1.23   thorpej {
    457   1.72        ad 	int error;
    458   1.72        ad 	bool mpsafe;
    459   1.23   thorpej 	struct vop_setattr_args a;
    460  1.105   hannken 	struct mount *mp;
    461   1.23   thorpej 	a.a_desc = VDESC(vop_setattr);
    462   1.23   thorpej 	a.a_vp = vp;
    463   1.23   thorpej 	a.a_vap = vap;
    464   1.23   thorpej 	a.a_cred = cred;
    465  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    466  1.105   hannken 	if (error)
    467  1.105   hannken 		return error;
    468   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_setattr), &a));
    469  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    470   1.72        ad 	return error;
    471   1.23   thorpej }
    472    1.1       cgd 
    473   1.31  jdolecek const int vop_read_vp_offsets[] = {
    474    1.1       cgd 	VOPARG_OFFSETOF(struct vop_read_args,a_vp),
    475    1.1       cgd 	VDESC_NO_OFFSET
    476    1.1       cgd };
    477   1.33  jdolecek const struct vnodeop_desc vop_read_desc = {
    478   1.67     pooka 	VOP_READ_DESCOFFSET,
    479    1.1       cgd 	"vop_read",
    480    1.1       cgd 	0,
    481    1.1       cgd 	vop_read_vp_offsets,
    482    1.1       cgd 	VDESC_NO_OFFSET,
    483    1.1       cgd 	VOPARG_OFFSETOF(struct vop_read_args, a_cred),
    484    1.1       cgd 	VDESC_NO_OFFSET,
    485    1.1       cgd };
    486   1.23   thorpej int
    487   1.60   thorpej VOP_READ(struct vnode *vp,
    488   1.60   thorpej     struct uio *uio,
    489   1.60   thorpej     int ioflag,
    490   1.65      elad     kauth_cred_t cred)
    491   1.23   thorpej {
    492   1.72        ad 	int error;
    493   1.72        ad 	bool mpsafe;
    494   1.23   thorpej 	struct vop_read_args a;
    495  1.105   hannken 	struct mount *mp;
    496   1.23   thorpej 	a.a_desc = VDESC(vop_read);
    497   1.23   thorpej 	a.a_vp = vp;
    498   1.23   thorpej 	a.a_uio = uio;
    499   1.23   thorpej 	a.a_ioflag = ioflag;
    500   1.23   thorpej 	a.a_cred = cred;
    501  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    502  1.105   hannken 	if (error)
    503  1.105   hannken 		return error;
    504   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_read), &a));
    505  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    506   1.72        ad 	return error;
    507   1.23   thorpej }
    508    1.1       cgd 
    509   1.31  jdolecek const int vop_write_vp_offsets[] = {
    510    1.1       cgd 	VOPARG_OFFSETOF(struct vop_write_args,a_vp),
    511    1.1       cgd 	VDESC_NO_OFFSET
    512    1.1       cgd };
    513   1.33  jdolecek const struct vnodeop_desc vop_write_desc = {
    514   1.67     pooka 	VOP_WRITE_DESCOFFSET,
    515    1.1       cgd 	"vop_write",
    516    1.1       cgd 	0,
    517    1.1       cgd 	vop_write_vp_offsets,
    518    1.1       cgd 	VDESC_NO_OFFSET,
    519    1.1       cgd 	VOPARG_OFFSETOF(struct vop_write_args, a_cred),
    520    1.1       cgd 	VDESC_NO_OFFSET,
    521    1.1       cgd };
    522   1.23   thorpej int
    523   1.60   thorpej VOP_WRITE(struct vnode *vp,
    524   1.60   thorpej     struct uio *uio,
    525   1.60   thorpej     int ioflag,
    526   1.65      elad     kauth_cred_t cred)
    527   1.23   thorpej {
    528   1.72        ad 	int error;
    529   1.72        ad 	bool mpsafe;
    530   1.23   thorpej 	struct vop_write_args a;
    531  1.105   hannken 	struct mount *mp;
    532   1.23   thorpej 	a.a_desc = VDESC(vop_write);
    533   1.23   thorpej 	a.a_vp = vp;
    534   1.23   thorpej 	a.a_uio = uio;
    535   1.23   thorpej 	a.a_ioflag = ioflag;
    536   1.23   thorpej 	a.a_cred = cred;
    537  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    538  1.105   hannken 	if (error)
    539  1.105   hannken 		return error;
    540   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_write), &a));
    541  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    542   1.72        ad 	return error;
    543   1.23   thorpej }
    544    1.1       cgd 
    545   1.93  dholland const int vop_fallocate_vp_offsets[] = {
    546   1.93  dholland 	VOPARG_OFFSETOF(struct vop_fallocate_args,a_vp),
    547   1.93  dholland 	VDESC_NO_OFFSET
    548   1.93  dholland };
    549   1.93  dholland const struct vnodeop_desc vop_fallocate_desc = {
    550   1.93  dholland 	VOP_FALLOCATE_DESCOFFSET,
    551   1.93  dholland 	"vop_fallocate",
    552   1.93  dholland 	0,
    553   1.93  dholland 	vop_fallocate_vp_offsets,
    554   1.93  dholland 	VDESC_NO_OFFSET,
    555   1.93  dholland 	VDESC_NO_OFFSET,
    556   1.93  dholland 	VDESC_NO_OFFSET,
    557   1.93  dholland };
    558   1.93  dholland int
    559   1.93  dholland VOP_FALLOCATE(struct vnode *vp,
    560   1.93  dholland     off_t pos,
    561   1.93  dholland     off_t len)
    562   1.93  dholland {
    563   1.93  dholland 	int error;
    564   1.93  dholland 	bool mpsafe;
    565   1.93  dholland 	struct vop_fallocate_args a;
    566  1.105   hannken 	struct mount *mp;
    567   1.93  dholland 	a.a_desc = VDESC(vop_fallocate);
    568   1.93  dholland 	a.a_vp = vp;
    569   1.93  dholland 	a.a_pos = pos;
    570   1.93  dholland 	a.a_len = len;
    571  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    572  1.105   hannken 	if (error)
    573  1.105   hannken 		return error;
    574   1.93  dholland 	error = (VCALL(vp, VOFFSET(vop_fallocate), &a));
    575  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    576   1.93  dholland 	return error;
    577   1.93  dholland }
    578   1.93  dholland 
    579   1.93  dholland const int vop_fdiscard_vp_offsets[] = {
    580   1.93  dholland 	VOPARG_OFFSETOF(struct vop_fdiscard_args,a_vp),
    581   1.93  dholland 	VDESC_NO_OFFSET
    582   1.93  dholland };
    583   1.93  dholland const struct vnodeop_desc vop_fdiscard_desc = {
    584   1.93  dholland 	VOP_FDISCARD_DESCOFFSET,
    585   1.93  dholland 	"vop_fdiscard",
    586   1.93  dholland 	0,
    587   1.93  dholland 	vop_fdiscard_vp_offsets,
    588   1.93  dholland 	VDESC_NO_OFFSET,
    589   1.93  dholland 	VDESC_NO_OFFSET,
    590   1.93  dholland 	VDESC_NO_OFFSET,
    591   1.93  dholland };
    592   1.93  dholland int
    593   1.93  dholland VOP_FDISCARD(struct vnode *vp,
    594   1.93  dholland     off_t pos,
    595   1.93  dholland     off_t len)
    596   1.93  dholland {
    597   1.93  dholland 	int error;
    598   1.93  dholland 	bool mpsafe;
    599   1.93  dholland 	struct vop_fdiscard_args a;
    600  1.105   hannken 	struct mount *mp;
    601   1.93  dholland 	a.a_desc = VDESC(vop_fdiscard);
    602   1.93  dholland 	a.a_vp = vp;
    603   1.93  dholland 	a.a_pos = pos;
    604   1.93  dholland 	a.a_len = len;
    605  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    606  1.105   hannken 	if (error)
    607  1.105   hannken 		return error;
    608   1.93  dholland 	error = (VCALL(vp, VOFFSET(vop_fdiscard), &a));
    609  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    610   1.93  dholland 	return error;
    611   1.93  dholland }
    612   1.93  dholland 
    613   1.31  jdolecek const int vop_ioctl_vp_offsets[] = {
    614    1.1       cgd 	VOPARG_OFFSETOF(struct vop_ioctl_args,a_vp),
    615    1.1       cgd 	VDESC_NO_OFFSET
    616    1.1       cgd };
    617   1.33  jdolecek const struct vnodeop_desc vop_ioctl_desc = {
    618   1.67     pooka 	VOP_IOCTL_DESCOFFSET,
    619    1.1       cgd 	"vop_ioctl",
    620    1.1       cgd 	0,
    621    1.1       cgd 	vop_ioctl_vp_offsets,
    622    1.1       cgd 	VDESC_NO_OFFSET,
    623    1.1       cgd 	VOPARG_OFFSETOF(struct vop_ioctl_args, a_cred),
    624    1.1       cgd 	VDESC_NO_OFFSET,
    625    1.1       cgd };
    626   1.23   thorpej int
    627   1.60   thorpej VOP_IOCTL(struct vnode *vp,
    628   1.60   thorpej     u_long command,
    629   1.60   thorpej     void *data,
    630   1.60   thorpej     int fflag,
    631   1.73     pooka     kauth_cred_t cred)
    632   1.23   thorpej {
    633   1.72        ad 	int error;
    634   1.72        ad 	bool mpsafe;
    635   1.23   thorpej 	struct vop_ioctl_args a;
    636  1.105   hannken 	struct mount *mp;
    637   1.23   thorpej 	a.a_desc = VDESC(vop_ioctl);
    638   1.23   thorpej 	a.a_vp = vp;
    639   1.23   thorpej 	a.a_command = command;
    640   1.23   thorpej 	a.a_data = data;
    641   1.23   thorpej 	a.a_fflag = fflag;
    642   1.23   thorpej 	a.a_cred = cred;
    643  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    644  1.105   hannken 	if (error)
    645  1.105   hannken 		return error;
    646   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_ioctl), &a));
    647  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    648   1.72        ad 	return error;
    649   1.23   thorpej }
    650    1.1       cgd 
    651   1.31  jdolecek const int vop_fcntl_vp_offsets[] = {
    652   1.18  wrstuden 	VOPARG_OFFSETOF(struct vop_fcntl_args,a_vp),
    653   1.18  wrstuden 	VDESC_NO_OFFSET
    654   1.18  wrstuden };
    655   1.33  jdolecek const struct vnodeop_desc vop_fcntl_desc = {
    656   1.67     pooka 	VOP_FCNTL_DESCOFFSET,
    657   1.18  wrstuden 	"vop_fcntl",
    658   1.18  wrstuden 	0,
    659   1.18  wrstuden 	vop_fcntl_vp_offsets,
    660   1.18  wrstuden 	VDESC_NO_OFFSET,
    661   1.18  wrstuden 	VOPARG_OFFSETOF(struct vop_fcntl_args, a_cred),
    662   1.18  wrstuden 	VDESC_NO_OFFSET,
    663   1.18  wrstuden };
    664   1.23   thorpej int
    665   1.60   thorpej VOP_FCNTL(struct vnode *vp,
    666   1.60   thorpej     u_int command,
    667   1.60   thorpej     void *data,
    668   1.60   thorpej     int fflag,
    669   1.73     pooka     kauth_cred_t cred)
    670   1.23   thorpej {
    671   1.72        ad 	int error;
    672   1.72        ad 	bool mpsafe;
    673   1.23   thorpej 	struct vop_fcntl_args a;
    674  1.105   hannken 	struct mount *mp;
    675   1.23   thorpej 	a.a_desc = VDESC(vop_fcntl);
    676   1.23   thorpej 	a.a_vp = vp;
    677   1.23   thorpej 	a.a_command = command;
    678   1.23   thorpej 	a.a_data = data;
    679   1.23   thorpej 	a.a_fflag = fflag;
    680   1.23   thorpej 	a.a_cred = cred;
    681  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    682  1.105   hannken 	if (error)
    683  1.105   hannken 		return error;
    684   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_fcntl), &a));
    685  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    686   1.72        ad 	return error;
    687   1.23   thorpej }
    688   1.18  wrstuden 
    689   1.31  jdolecek const int vop_poll_vp_offsets[] = {
    690    1.3   mycroft 	VOPARG_OFFSETOF(struct vop_poll_args,a_vp),
    691    1.1       cgd 	VDESC_NO_OFFSET
    692    1.1       cgd };
    693   1.33  jdolecek const struct vnodeop_desc vop_poll_desc = {
    694   1.67     pooka 	VOP_POLL_DESCOFFSET,
    695    1.3   mycroft 	"vop_poll",
    696    1.1       cgd 	0,
    697    1.3   mycroft 	vop_poll_vp_offsets,
    698    1.1       cgd 	VDESC_NO_OFFSET,
    699    1.3   mycroft 	VDESC_NO_OFFSET,
    700    1.1       cgd 	VDESC_NO_OFFSET,
    701    1.1       cgd };
    702   1.23   thorpej int
    703   1.60   thorpej VOP_POLL(struct vnode *vp,
    704   1.73     pooka     int events)
    705   1.23   thorpej {
    706   1.72        ad 	int error;
    707   1.72        ad 	bool mpsafe;
    708   1.23   thorpej 	struct vop_poll_args a;
    709  1.105   hannken 	struct mount *mp;
    710   1.23   thorpej 	a.a_desc = VDESC(vop_poll);
    711   1.23   thorpej 	a.a_vp = vp;
    712   1.23   thorpej 	a.a_events = events;
    713  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    714  1.105   hannken 	if (error)
    715  1.105   hannken 		return error;
    716   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_poll), &a));
    717  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    718   1.72        ad 	return error;
    719   1.23   thorpej }
    720    1.1       cgd 
    721   1.40  jdolecek const int vop_kqfilter_vp_offsets[] = {
    722   1.40  jdolecek 	VOPARG_OFFSETOF(struct vop_kqfilter_args,a_vp),
    723   1.40  jdolecek 	VDESC_NO_OFFSET
    724   1.40  jdolecek };
    725   1.40  jdolecek const struct vnodeop_desc vop_kqfilter_desc = {
    726   1.67     pooka 	VOP_KQFILTER_DESCOFFSET,
    727   1.40  jdolecek 	"vop_kqfilter",
    728   1.40  jdolecek 	0,
    729   1.40  jdolecek 	vop_kqfilter_vp_offsets,
    730   1.40  jdolecek 	VDESC_NO_OFFSET,
    731   1.40  jdolecek 	VDESC_NO_OFFSET,
    732   1.40  jdolecek 	VDESC_NO_OFFSET,
    733   1.40  jdolecek };
    734   1.40  jdolecek int
    735   1.60   thorpej VOP_KQFILTER(struct vnode *vp,
    736   1.60   thorpej     struct knote *kn)
    737   1.40  jdolecek {
    738   1.72        ad 	int error;
    739   1.72        ad 	bool mpsafe;
    740   1.40  jdolecek 	struct vop_kqfilter_args a;
    741  1.105   hannken 	struct mount *mp;
    742   1.40  jdolecek 	a.a_desc = VDESC(vop_kqfilter);
    743   1.40  jdolecek 	a.a_vp = vp;
    744   1.40  jdolecek 	a.a_kn = kn;
    745  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    746  1.105   hannken 	if (error)
    747  1.105   hannken 		return error;
    748   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_kqfilter), &a));
    749  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    750   1.72        ad 	return error;
    751   1.40  jdolecek }
    752   1.40  jdolecek 
    753   1.31  jdolecek const int vop_revoke_vp_offsets[] = {
    754   1.10      fvdl 	VOPARG_OFFSETOF(struct vop_revoke_args,a_vp),
    755   1.10      fvdl 	VDESC_NO_OFFSET
    756   1.10      fvdl };
    757   1.33  jdolecek const struct vnodeop_desc vop_revoke_desc = {
    758   1.67     pooka 	VOP_REVOKE_DESCOFFSET,
    759   1.10      fvdl 	"vop_revoke",
    760   1.10      fvdl 	0,
    761   1.10      fvdl 	vop_revoke_vp_offsets,
    762   1.10      fvdl 	VDESC_NO_OFFSET,
    763   1.10      fvdl 	VDESC_NO_OFFSET,
    764   1.10      fvdl 	VDESC_NO_OFFSET,
    765   1.10      fvdl };
    766   1.23   thorpej int
    767   1.60   thorpej VOP_REVOKE(struct vnode *vp,
    768   1.60   thorpej     int flags)
    769   1.23   thorpej {
    770   1.72        ad 	int error;
    771   1.72        ad 	bool mpsafe;
    772   1.23   thorpej 	struct vop_revoke_args a;
    773  1.105   hannken 	struct mount *mp;
    774   1.23   thorpej 	a.a_desc = VDESC(vop_revoke);
    775   1.23   thorpej 	a.a_vp = vp;
    776   1.23   thorpej 	a.a_flags = flags;
    777  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    778  1.105   hannken 	if (error)
    779  1.105   hannken 		return error;
    780   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_revoke), &a));
    781  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    782   1.72        ad 	return error;
    783   1.23   thorpej }
    784   1.10      fvdl 
    785   1.31  jdolecek const int vop_mmap_vp_offsets[] = {
    786    1.1       cgd 	VOPARG_OFFSETOF(struct vop_mmap_args,a_vp),
    787    1.1       cgd 	VDESC_NO_OFFSET
    788    1.1       cgd };
    789   1.33  jdolecek const struct vnodeop_desc vop_mmap_desc = {
    790   1.67     pooka 	VOP_MMAP_DESCOFFSET,
    791    1.1       cgd 	"vop_mmap",
    792    1.1       cgd 	0,
    793    1.1       cgd 	vop_mmap_vp_offsets,
    794    1.1       cgd 	VDESC_NO_OFFSET,
    795    1.1       cgd 	VOPARG_OFFSETOF(struct vop_mmap_args, a_cred),
    796    1.1       cgd 	VDESC_NO_OFFSET,
    797    1.1       cgd };
    798   1.23   thorpej int
    799   1.60   thorpej VOP_MMAP(struct vnode *vp,
    800   1.70     pooka     vm_prot_t prot,
    801   1.73     pooka     kauth_cred_t cred)
    802   1.23   thorpej {
    803   1.72        ad 	int error;
    804   1.72        ad 	bool mpsafe;
    805   1.23   thorpej 	struct vop_mmap_args a;
    806  1.105   hannken 	struct mount *mp;
    807   1.23   thorpej 	a.a_desc = VDESC(vop_mmap);
    808   1.23   thorpej 	a.a_vp = vp;
    809   1.70     pooka 	a.a_prot = prot;
    810   1.23   thorpej 	a.a_cred = cred;
    811  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    812  1.105   hannken 	if (error)
    813  1.105   hannken 		return error;
    814   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_mmap), &a));
    815  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    816   1.72        ad 	return error;
    817   1.23   thorpej }
    818    1.1       cgd 
    819   1.31  jdolecek const int vop_fsync_vp_offsets[] = {
    820    1.1       cgd 	VOPARG_OFFSETOF(struct vop_fsync_args,a_vp),
    821    1.1       cgd 	VDESC_NO_OFFSET
    822    1.1       cgd };
    823   1.33  jdolecek const struct vnodeop_desc vop_fsync_desc = {
    824   1.67     pooka 	VOP_FSYNC_DESCOFFSET,
    825    1.1       cgd 	"vop_fsync",
    826    1.1       cgd 	0,
    827    1.1       cgd 	vop_fsync_vp_offsets,
    828    1.1       cgd 	VDESC_NO_OFFSET,
    829    1.1       cgd 	VOPARG_OFFSETOF(struct vop_fsync_args, a_cred),
    830    1.1       cgd 	VDESC_NO_OFFSET,
    831    1.1       cgd };
    832   1.23   thorpej int
    833   1.60   thorpej VOP_FSYNC(struct vnode *vp,
    834   1.65      elad     kauth_cred_t cred,
    835   1.60   thorpej     int flags,
    836   1.60   thorpej     off_t offlo,
    837   1.73     pooka     off_t offhi)
    838   1.23   thorpej {
    839   1.72        ad 	int error;
    840   1.72        ad 	bool mpsafe;
    841   1.23   thorpej 	struct vop_fsync_args a;
    842  1.105   hannken 	struct mount *mp;
    843   1.23   thorpej 	a.a_desc = VDESC(vop_fsync);
    844   1.23   thorpej 	a.a_vp = vp;
    845   1.23   thorpej 	a.a_cred = cred;
    846   1.23   thorpej 	a.a_flags = flags;
    847   1.25      fvdl 	a.a_offlo = offlo;
    848   1.25      fvdl 	a.a_offhi = offhi;
    849  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    850  1.105   hannken 	if (error)
    851  1.105   hannken 		return error;
    852   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_fsync), &a));
    853  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    854   1.72        ad 	return error;
    855   1.23   thorpej }
    856    1.1       cgd 
    857   1.31  jdolecek const int vop_seek_vp_offsets[] = {
    858    1.1       cgd 	VOPARG_OFFSETOF(struct vop_seek_args,a_vp),
    859    1.1       cgd 	VDESC_NO_OFFSET
    860    1.1       cgd };
    861   1.33  jdolecek const struct vnodeop_desc vop_seek_desc = {
    862   1.67     pooka 	VOP_SEEK_DESCOFFSET,
    863    1.1       cgd 	"vop_seek",
    864    1.1       cgd 	0,
    865    1.1       cgd 	vop_seek_vp_offsets,
    866    1.1       cgd 	VDESC_NO_OFFSET,
    867    1.1       cgd 	VOPARG_OFFSETOF(struct vop_seek_args, a_cred),
    868    1.1       cgd 	VDESC_NO_OFFSET,
    869    1.1       cgd };
    870   1.23   thorpej int
    871   1.60   thorpej VOP_SEEK(struct vnode *vp,
    872   1.60   thorpej     off_t oldoff,
    873   1.60   thorpej     off_t newoff,
    874   1.65      elad     kauth_cred_t cred)
    875   1.23   thorpej {
    876   1.72        ad 	int error;
    877   1.72        ad 	bool mpsafe;
    878   1.23   thorpej 	struct vop_seek_args a;
    879  1.105   hannken 	struct mount *mp;
    880   1.23   thorpej 	a.a_desc = VDESC(vop_seek);
    881   1.23   thorpej 	a.a_vp = vp;
    882   1.23   thorpej 	a.a_oldoff = oldoff;
    883   1.23   thorpej 	a.a_newoff = newoff;
    884   1.23   thorpej 	a.a_cred = cred;
    885  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    886  1.105   hannken 	if (error)
    887  1.105   hannken 		return error;
    888   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_seek), &a));
    889  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    890   1.72        ad 	return error;
    891   1.23   thorpej }
    892    1.1       cgd 
    893   1.31  jdolecek const int vop_remove_vp_offsets[] = {
    894  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_remove_v2_args,a_dvp),
    895  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_remove_v2_args,a_vp),
    896    1.1       cgd 	VDESC_NO_OFFSET
    897    1.1       cgd };
    898   1.33  jdolecek const struct vnodeop_desc vop_remove_desc = {
    899   1.67     pooka 	VOP_REMOVE_DESCOFFSET,
    900    1.1       cgd 	"vop_remove",
    901  1.103  riastrad 	0 | VDESC_VP1_WILLPUT,
    902    1.1       cgd 	vop_remove_vp_offsets,
    903    1.1       cgd 	VDESC_NO_OFFSET,
    904    1.1       cgd 	VDESC_NO_OFFSET,
    905  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_remove_v2_args, a_cnp),
    906    1.1       cgd };
    907   1.23   thorpej int
    908   1.60   thorpej VOP_REMOVE(struct vnode *dvp,
    909   1.60   thorpej     struct vnode *vp,
    910   1.60   thorpej     struct componentname *cnp)
    911   1.23   thorpej {
    912   1.72        ad 	int error;
    913   1.72        ad 	bool mpsafe;
    914  1.103  riastrad 	struct vop_remove_v2_args a;
    915  1.105   hannken 	struct mount *mp;
    916   1.23   thorpej 	a.a_desc = VDESC(vop_remove);
    917   1.23   thorpej 	a.a_dvp = dvp;
    918   1.81     pooka 	a.a_vp = vp;
    919   1.23   thorpej 	a.a_cnp = cnp;
    920  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
    921  1.105   hannken 	if (error)
    922  1.105   hannken 		return error;
    923   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_remove), &a));
    924  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
    925   1.72        ad 	return error;
    926   1.23   thorpej }
    927    1.1       cgd 
    928   1.31  jdolecek const int vop_link_vp_offsets[] = {
    929   1.94  riastrad 	VOPARG_OFFSETOF(struct vop_link_v2_args,a_dvp),
    930   1.94  riastrad 	VOPARG_OFFSETOF(struct vop_link_v2_args,a_vp),
    931    1.1       cgd 	VDESC_NO_OFFSET
    932    1.1       cgd };
    933   1.33  jdolecek const struct vnodeop_desc vop_link_desc = {
    934   1.67     pooka 	VOP_LINK_DESCOFFSET,
    935    1.1       cgd 	"vop_link",
    936   1.94  riastrad 	0,
    937    1.1       cgd 	vop_link_vp_offsets,
    938    1.1       cgd 	VDESC_NO_OFFSET,
    939    1.1       cgd 	VDESC_NO_OFFSET,
    940   1.94  riastrad 	VOPARG_OFFSETOF(struct vop_link_v2_args, a_cnp),
    941    1.1       cgd };
    942   1.23   thorpej int
    943   1.60   thorpej VOP_LINK(struct vnode *dvp,
    944   1.60   thorpej     struct vnode *vp,
    945   1.60   thorpej     struct componentname *cnp)
    946   1.23   thorpej {
    947   1.72        ad 	int error;
    948   1.72        ad 	bool mpsafe;
    949   1.94  riastrad 	struct vop_link_v2_args a;
    950  1.105   hannken 	struct mount *mp;
    951   1.23   thorpej 	a.a_desc = VDESC(vop_link);
    952   1.23   thorpej 	a.a_dvp = dvp;
    953   1.81     pooka 	a.a_vp = vp;
    954   1.23   thorpej 	a.a_cnp = cnp;
    955  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
    956  1.105   hannken 	if (error)
    957  1.105   hannken 		return error;
    958   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_link), &a));
    959  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
    960   1.72        ad 	return error;
    961   1.23   thorpej }
    962    1.1       cgd 
    963   1.31  jdolecek const int vop_rename_vp_offsets[] = {
    964    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args,a_fdvp),
    965    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args,a_fvp),
    966    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args,a_tdvp),
    967    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args,a_tvp),
    968    1.1       cgd 	VDESC_NO_OFFSET
    969    1.1       cgd };
    970   1.33  jdolecek const struct vnodeop_desc vop_rename_desc = {
    971   1.67     pooka 	VOP_RENAME_DESCOFFSET,
    972    1.1       cgd 	"vop_rename",
    973   1.42  jdolecek 	0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLPUT | VDESC_VP3_WILLPUT,
    974    1.1       cgd 	vop_rename_vp_offsets,
    975    1.1       cgd 	VDESC_NO_OFFSET,
    976    1.1       cgd 	VDESC_NO_OFFSET,
    977    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args, a_fcnp),
    978    1.1       cgd };
    979   1.23   thorpej int
    980   1.60   thorpej VOP_RENAME(struct vnode *fdvp,
    981   1.60   thorpej     struct vnode *fvp,
    982   1.60   thorpej     struct componentname *fcnp,
    983   1.60   thorpej     struct vnode *tdvp,
    984   1.60   thorpej     struct vnode *tvp,
    985   1.60   thorpej     struct componentname *tcnp)
    986   1.23   thorpej {
    987   1.72        ad 	int error;
    988   1.72        ad 	bool mpsafe;
    989   1.23   thorpej 	struct vop_rename_args a;
    990  1.105   hannken 	struct mount *mp;
    991   1.23   thorpej 	a.a_desc = VDESC(vop_rename);
    992   1.23   thorpej 	a.a_fdvp = fdvp;
    993   1.23   thorpej 	a.a_fvp = fvp;
    994   1.23   thorpej 	a.a_fcnp = fcnp;
    995   1.23   thorpej 	a.a_tdvp = tdvp;
    996   1.23   thorpej 	a.a_tvp = tvp;
    997   1.23   thorpej 	a.a_tcnp = tcnp;
    998  1.105   hannken 	error = vop_pre(fdvp, &mp, &mpsafe, FST_YES);
    999  1.105   hannken 	if (error)
   1000  1.105   hannken 		return error;
   1001   1.72        ad 	error = (VCALL(fdvp, VOFFSET(vop_rename), &a));
   1002  1.105   hannken 	vop_post(fdvp, mp, mpsafe, FST_YES);
   1003   1.72        ad 	return error;
   1004   1.23   thorpej }
   1005    1.1       cgd 
   1006   1.31  jdolecek const int vop_mkdir_vp_offsets[] = {
   1007   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mkdir_v3_args,a_dvp),
   1008    1.1       cgd 	VDESC_NO_OFFSET
   1009    1.1       cgd };
   1010   1.33  jdolecek const struct vnodeop_desc vop_mkdir_desc = {
   1011   1.67     pooka 	VOP_MKDIR_DESCOFFSET,
   1012    1.1       cgd 	"vop_mkdir",
   1013   1.90   hannken 	0,
   1014    1.1       cgd 	vop_mkdir_vp_offsets,
   1015   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mkdir_v3_args, a_vpp),
   1016    1.1       cgd 	VDESC_NO_OFFSET,
   1017   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mkdir_v3_args, a_cnp),
   1018    1.1       cgd };
   1019   1.23   thorpej int
   1020   1.60   thorpej VOP_MKDIR(struct vnode *dvp,
   1021   1.60   thorpej     struct vnode **vpp,
   1022   1.60   thorpej     struct componentname *cnp,
   1023   1.60   thorpej     struct vattr *vap)
   1024   1.23   thorpej {
   1025   1.72        ad 	int error;
   1026   1.72        ad 	bool mpsafe;
   1027   1.91   hannken 	struct vop_mkdir_v3_args a;
   1028  1.105   hannken 	struct mount *mp;
   1029   1.23   thorpej 	a.a_desc = VDESC(vop_mkdir);
   1030   1.23   thorpej 	a.a_dvp = dvp;
   1031   1.23   thorpej 	a.a_vpp = vpp;
   1032   1.23   thorpej 	a.a_cnp = cnp;
   1033   1.23   thorpej 	a.a_vap = vap;
   1034  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
   1035  1.105   hannken 	if (error)
   1036  1.105   hannken 		return error;
   1037   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_mkdir), &a));
   1038  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
   1039   1.69     pooka #ifdef DIAGNOSTIC
   1040   1.72        ad 	if (error == 0)
   1041   1.69     pooka 		KASSERT((*vpp)->v_size != VSIZENOTSET
   1042   1.69     pooka 		    && (*vpp)->v_writesize != VSIZENOTSET);
   1043   1.69     pooka #endif /* DIAGNOSTIC */
   1044   1.72        ad 	return error;
   1045   1.23   thorpej }
   1046    1.1       cgd 
   1047   1.31  jdolecek const int vop_rmdir_vp_offsets[] = {
   1048  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_rmdir_v2_args,a_dvp),
   1049  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_rmdir_v2_args,a_vp),
   1050    1.1       cgd 	VDESC_NO_OFFSET
   1051    1.1       cgd };
   1052   1.33  jdolecek const struct vnodeop_desc vop_rmdir_desc = {
   1053   1.67     pooka 	VOP_RMDIR_DESCOFFSET,
   1054    1.1       cgd 	"vop_rmdir",
   1055  1.103  riastrad 	0 | VDESC_VP1_WILLPUT,
   1056    1.1       cgd 	vop_rmdir_vp_offsets,
   1057    1.1       cgd 	VDESC_NO_OFFSET,
   1058    1.1       cgd 	VDESC_NO_OFFSET,
   1059  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_rmdir_v2_args, a_cnp),
   1060    1.1       cgd };
   1061   1.23   thorpej int
   1062   1.60   thorpej VOP_RMDIR(struct vnode *dvp,
   1063   1.60   thorpej     struct vnode *vp,
   1064   1.60   thorpej     struct componentname *cnp)
   1065   1.23   thorpej {
   1066   1.72        ad 	int error;
   1067   1.72        ad 	bool mpsafe;
   1068  1.103  riastrad 	struct vop_rmdir_v2_args a;
   1069  1.105   hannken 	struct mount *mp;
   1070   1.23   thorpej 	a.a_desc = VDESC(vop_rmdir);
   1071   1.23   thorpej 	a.a_dvp = dvp;
   1072   1.81     pooka 	a.a_vp = vp;
   1073   1.23   thorpej 	a.a_cnp = cnp;
   1074  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
   1075  1.105   hannken 	if (error)
   1076  1.105   hannken 		return error;
   1077   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_rmdir), &a));
   1078  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
   1079   1.72        ad 	return error;
   1080   1.23   thorpej }
   1081    1.1       cgd 
   1082   1.31  jdolecek const int vop_symlink_vp_offsets[] = {
   1083   1.91   hannken 	VOPARG_OFFSETOF(struct vop_symlink_v3_args,a_dvp),
   1084    1.1       cgd 	VDESC_NO_OFFSET
   1085    1.1       cgd };
   1086   1.33  jdolecek const struct vnodeop_desc vop_symlink_desc = {
   1087   1.67     pooka 	VOP_SYMLINK_DESCOFFSET,
   1088    1.1       cgd 	"vop_symlink",
   1089   1.90   hannken 	0,
   1090    1.1       cgd 	vop_symlink_vp_offsets,
   1091   1.91   hannken 	VOPARG_OFFSETOF(struct vop_symlink_v3_args, a_vpp),
   1092    1.1       cgd 	VDESC_NO_OFFSET,
   1093   1.91   hannken 	VOPARG_OFFSETOF(struct vop_symlink_v3_args, a_cnp),
   1094    1.1       cgd };
   1095   1.23   thorpej int
   1096   1.60   thorpej VOP_SYMLINK(struct vnode *dvp,
   1097   1.60   thorpej     struct vnode **vpp,
   1098   1.60   thorpej     struct componentname *cnp,
   1099   1.60   thorpej     struct vattr *vap,
   1100   1.60   thorpej     char *target)
   1101   1.23   thorpej {
   1102   1.72        ad 	int error;
   1103   1.72        ad 	bool mpsafe;
   1104   1.91   hannken 	struct vop_symlink_v3_args a;
   1105  1.105   hannken 	struct mount *mp;
   1106   1.23   thorpej 	a.a_desc = VDESC(vop_symlink);
   1107   1.23   thorpej 	a.a_dvp = dvp;
   1108   1.23   thorpej 	a.a_vpp = vpp;
   1109   1.23   thorpej 	a.a_cnp = cnp;
   1110   1.23   thorpej 	a.a_vap = vap;
   1111   1.23   thorpej 	a.a_target = target;
   1112  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
   1113  1.105   hannken 	if (error)
   1114  1.105   hannken 		return error;
   1115   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_symlink), &a));
   1116  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
   1117   1.69     pooka #ifdef DIAGNOSTIC
   1118   1.72        ad 	if (error == 0)
   1119   1.69     pooka 		KASSERT((*vpp)->v_size != VSIZENOTSET
   1120   1.69     pooka 		    && (*vpp)->v_writesize != VSIZENOTSET);
   1121   1.69     pooka #endif /* DIAGNOSTIC */
   1122   1.72        ad 	return error;
   1123   1.23   thorpej }
   1124    1.1       cgd 
   1125   1.31  jdolecek const int vop_readdir_vp_offsets[] = {
   1126    1.1       cgd 	VOPARG_OFFSETOF(struct vop_readdir_args,a_vp),
   1127    1.1       cgd 	VDESC_NO_OFFSET
   1128    1.1       cgd };
   1129   1.33  jdolecek const struct vnodeop_desc vop_readdir_desc = {
   1130   1.67     pooka 	VOP_READDIR_DESCOFFSET,
   1131    1.1       cgd 	"vop_readdir",
   1132    1.1       cgd 	0,
   1133    1.1       cgd 	vop_readdir_vp_offsets,
   1134    1.1       cgd 	VDESC_NO_OFFSET,
   1135    1.1       cgd 	VOPARG_OFFSETOF(struct vop_readdir_args, a_cred),
   1136    1.1       cgd 	VDESC_NO_OFFSET,
   1137    1.1       cgd };
   1138   1.23   thorpej int
   1139   1.60   thorpej VOP_READDIR(struct vnode *vp,
   1140   1.60   thorpej     struct uio *uio,
   1141   1.65      elad     kauth_cred_t cred,
   1142   1.60   thorpej     int *eofflag,
   1143   1.60   thorpej     off_t **cookies,
   1144   1.60   thorpej     int *ncookies)
   1145   1.23   thorpej {
   1146   1.72        ad 	int error;
   1147   1.72        ad 	bool mpsafe;
   1148   1.23   thorpej 	struct vop_readdir_args a;
   1149  1.105   hannken 	struct mount *mp;
   1150   1.23   thorpej 	a.a_desc = VDESC(vop_readdir);
   1151   1.23   thorpej 	a.a_vp = vp;
   1152   1.23   thorpej 	a.a_uio = uio;
   1153   1.23   thorpej 	a.a_cred = cred;
   1154   1.23   thorpej 	a.a_eofflag = eofflag;
   1155   1.23   thorpej 	a.a_cookies = cookies;
   1156   1.23   thorpej 	a.a_ncookies = ncookies;
   1157  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1158  1.105   hannken 	if (error)
   1159  1.105   hannken 		return error;
   1160   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_readdir), &a));
   1161  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1162   1.72        ad 	return error;
   1163   1.23   thorpej }
   1164    1.1       cgd 
   1165   1.31  jdolecek const int vop_readlink_vp_offsets[] = {
   1166    1.1       cgd 	VOPARG_OFFSETOF(struct vop_readlink_args,a_vp),
   1167    1.1       cgd 	VDESC_NO_OFFSET
   1168    1.1       cgd };
   1169   1.33  jdolecek const struct vnodeop_desc vop_readlink_desc = {
   1170   1.67     pooka 	VOP_READLINK_DESCOFFSET,
   1171    1.1       cgd 	"vop_readlink",
   1172    1.1       cgd 	0,
   1173    1.1       cgd 	vop_readlink_vp_offsets,
   1174    1.1       cgd 	VDESC_NO_OFFSET,
   1175    1.1       cgd 	VOPARG_OFFSETOF(struct vop_readlink_args, a_cred),
   1176    1.1       cgd 	VDESC_NO_OFFSET,
   1177    1.1       cgd };
   1178   1.23   thorpej int
   1179   1.60   thorpej VOP_READLINK(struct vnode *vp,
   1180   1.60   thorpej     struct uio *uio,
   1181   1.65      elad     kauth_cred_t cred)
   1182   1.23   thorpej {
   1183   1.72        ad 	int error;
   1184   1.72        ad 	bool mpsafe;
   1185   1.23   thorpej 	struct vop_readlink_args a;
   1186  1.105   hannken 	struct mount *mp;
   1187   1.23   thorpej 	a.a_desc = VDESC(vop_readlink);
   1188   1.23   thorpej 	a.a_vp = vp;
   1189   1.23   thorpej 	a.a_uio = uio;
   1190   1.23   thorpej 	a.a_cred = cred;
   1191  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1192  1.105   hannken 	if (error)
   1193  1.105   hannken 		return error;
   1194   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_readlink), &a));
   1195  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1196   1.72        ad 	return error;
   1197   1.23   thorpej }
   1198    1.1       cgd 
   1199   1.31  jdolecek const int vop_abortop_vp_offsets[] = {
   1200    1.1       cgd 	VOPARG_OFFSETOF(struct vop_abortop_args,a_dvp),
   1201    1.1       cgd 	VDESC_NO_OFFSET
   1202    1.1       cgd };
   1203   1.33  jdolecek const struct vnodeop_desc vop_abortop_desc = {
   1204   1.67     pooka 	VOP_ABORTOP_DESCOFFSET,
   1205    1.1       cgd 	"vop_abortop",
   1206    1.1       cgd 	0,
   1207    1.1       cgd 	vop_abortop_vp_offsets,
   1208    1.1       cgd 	VDESC_NO_OFFSET,
   1209    1.1       cgd 	VDESC_NO_OFFSET,
   1210    1.1       cgd 	VOPARG_OFFSETOF(struct vop_abortop_args, a_cnp),
   1211    1.1       cgd };
   1212   1.23   thorpej int
   1213   1.60   thorpej VOP_ABORTOP(struct vnode *dvp,
   1214   1.60   thorpej     struct componentname *cnp)
   1215   1.23   thorpej {
   1216   1.72        ad 	int error;
   1217   1.72        ad 	bool mpsafe;
   1218   1.23   thorpej 	struct vop_abortop_args a;
   1219  1.105   hannken 	struct mount *mp;
   1220   1.23   thorpej 	a.a_desc = VDESC(vop_abortop);
   1221   1.23   thorpej 	a.a_dvp = dvp;
   1222   1.23   thorpej 	a.a_cnp = cnp;
   1223  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_YES);
   1224  1.105   hannken 	if (error)
   1225  1.105   hannken 		return error;
   1226   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_abortop), &a));
   1227  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_YES);
   1228   1.72        ad 	return error;
   1229   1.23   thorpej }
   1230    1.1       cgd 
   1231   1.31  jdolecek const int vop_inactive_vp_offsets[] = {
   1232   1.98  riastrad 	VOPARG_OFFSETOF(struct vop_inactive_v2_args,a_vp),
   1233    1.1       cgd 	VDESC_NO_OFFSET
   1234    1.1       cgd };
   1235   1.33  jdolecek const struct vnodeop_desc vop_inactive_desc = {
   1236   1.67     pooka 	VOP_INACTIVE_DESCOFFSET,
   1237    1.1       cgd 	"vop_inactive",
   1238   1.98  riastrad 	0,
   1239    1.1       cgd 	vop_inactive_vp_offsets,
   1240    1.1       cgd 	VDESC_NO_OFFSET,
   1241    1.1       cgd 	VDESC_NO_OFFSET,
   1242    1.1       cgd 	VDESC_NO_OFFSET,
   1243    1.1       cgd };
   1244   1.23   thorpej int
   1245   1.75        ad VOP_INACTIVE(struct vnode *vp,
   1246   1.75        ad     bool *recycle)
   1247   1.23   thorpej {
   1248   1.72        ad 	int error;
   1249   1.72        ad 	bool mpsafe;
   1250   1.98  riastrad 	struct vop_inactive_v2_args a;
   1251  1.105   hannken 	struct mount *mp;
   1252   1.23   thorpej 	a.a_desc = VDESC(vop_inactive);
   1253   1.23   thorpej 	a.a_vp = vp;
   1254   1.75        ad 	a.a_recycle = recycle;
   1255  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1256  1.105   hannken 	if (error)
   1257  1.105   hannken 		return error;
   1258   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_inactive), &a));
   1259  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1260   1.72        ad 	return error;
   1261   1.23   thorpej }
   1262    1.1       cgd 
   1263   1.31  jdolecek const int vop_reclaim_vp_offsets[] = {
   1264  1.104  riastrad 	VOPARG_OFFSETOF(struct vop_reclaim_v2_args,a_vp),
   1265    1.1       cgd 	VDESC_NO_OFFSET
   1266    1.1       cgd };
   1267   1.33  jdolecek const struct vnodeop_desc vop_reclaim_desc = {
   1268   1.67     pooka 	VOP_RECLAIM_DESCOFFSET,
   1269    1.1       cgd 	"vop_reclaim",
   1270    1.1       cgd 	0,
   1271    1.1       cgd 	vop_reclaim_vp_offsets,
   1272    1.1       cgd 	VDESC_NO_OFFSET,
   1273    1.1       cgd 	VDESC_NO_OFFSET,
   1274    1.1       cgd 	VDESC_NO_OFFSET,
   1275    1.1       cgd };
   1276   1.23   thorpej int
   1277   1.73     pooka VOP_RECLAIM(struct vnode *vp)
   1278   1.23   thorpej {
   1279   1.72        ad 	int error;
   1280   1.72        ad 	bool mpsafe;
   1281  1.104  riastrad 	struct vop_reclaim_v2_args a;
   1282  1.105   hannken 	struct mount *mp;
   1283   1.23   thorpej 	a.a_desc = VDESC(vop_reclaim);
   1284   1.23   thorpej 	a.a_vp = vp;
   1285  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1286  1.105   hannken 	if (error)
   1287  1.105   hannken 		return error;
   1288   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_reclaim), &a));
   1289  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1290   1.72        ad 	return error;
   1291   1.23   thorpej }
   1292    1.1       cgd 
   1293   1.31  jdolecek const int vop_lock_vp_offsets[] = {
   1294    1.1       cgd 	VOPARG_OFFSETOF(struct vop_lock_args,a_vp),
   1295    1.1       cgd 	VDESC_NO_OFFSET
   1296    1.1       cgd };
   1297   1.33  jdolecek const struct vnodeop_desc vop_lock_desc = {
   1298   1.67     pooka 	VOP_LOCK_DESCOFFSET,
   1299    1.1       cgd 	"vop_lock",
   1300    1.1       cgd 	0,
   1301    1.1       cgd 	vop_lock_vp_offsets,
   1302    1.1       cgd 	VDESC_NO_OFFSET,
   1303    1.1       cgd 	VDESC_NO_OFFSET,
   1304    1.1       cgd 	VDESC_NO_OFFSET,
   1305    1.1       cgd };
   1306   1.23   thorpej int
   1307   1.60   thorpej VOP_LOCK(struct vnode *vp,
   1308   1.60   thorpej     int flags)
   1309   1.23   thorpej {
   1310   1.72        ad 	int error;
   1311   1.72        ad 	bool mpsafe;
   1312   1.23   thorpej 	struct vop_lock_args a;
   1313  1.105   hannken 	struct mount *mp;
   1314   1.23   thorpej 	a.a_desc = VDESC(vop_lock);
   1315   1.23   thorpej 	a.a_vp = vp;
   1316   1.23   thorpej 	a.a_flags = flags;
   1317  1.110        ad 	error = vop_pre(vp, &mp, &mpsafe, (!(flags & (LK_SHARED|LK_EXCLUSIVE)) ? FST_NO : (flags & LK_NOWAIT ? FST_TRY : FST_YES)));
   1318  1.105   hannken 	if (error)
   1319  1.105   hannken 		return error;
   1320   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_lock), &a));
   1321  1.109        ad 	vop_post(vp, mp, mpsafe, (flags & (LK_UPGRADE|LK_DOWNGRADE) ? FST_NO : (error ? FST_YES : FST_NO)));
   1322   1.72        ad 	return error;
   1323   1.23   thorpej }
   1324    1.1       cgd 
   1325   1.31  jdolecek const int vop_unlock_vp_offsets[] = {
   1326    1.1       cgd 	VOPARG_OFFSETOF(struct vop_unlock_args,a_vp),
   1327    1.1       cgd 	VDESC_NO_OFFSET
   1328    1.1       cgd };
   1329   1.33  jdolecek const struct vnodeop_desc vop_unlock_desc = {
   1330   1.67     pooka 	VOP_UNLOCK_DESCOFFSET,
   1331    1.1       cgd 	"vop_unlock",
   1332    1.1       cgd 	0,
   1333    1.1       cgd 	vop_unlock_vp_offsets,
   1334    1.1       cgd 	VDESC_NO_OFFSET,
   1335    1.1       cgd 	VDESC_NO_OFFSET,
   1336    1.1       cgd 	VDESC_NO_OFFSET,
   1337    1.1       cgd };
   1338   1.23   thorpej int
   1339   1.85   hannken VOP_UNLOCK(struct vnode *vp)
   1340   1.23   thorpej {
   1341   1.72        ad 	int error;
   1342   1.72        ad 	bool mpsafe;
   1343   1.23   thorpej 	struct vop_unlock_args a;
   1344  1.105   hannken 	struct mount *mp;
   1345   1.23   thorpej 	a.a_desc = VDESC(vop_unlock);
   1346   1.23   thorpej 	a.a_vp = vp;
   1347  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1348  1.105   hannken 	if (error)
   1349  1.105   hannken 		return error;
   1350   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_unlock), &a));
   1351  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
   1352   1.72        ad 	return error;
   1353   1.23   thorpej }
   1354    1.1       cgd 
   1355   1.31  jdolecek const int vop_bmap_vp_offsets[] = {
   1356    1.1       cgd 	VOPARG_OFFSETOF(struct vop_bmap_args,a_vp),
   1357    1.1       cgd 	VDESC_NO_OFFSET
   1358    1.1       cgd };
   1359   1.33  jdolecek const struct vnodeop_desc vop_bmap_desc = {
   1360   1.67     pooka 	VOP_BMAP_DESCOFFSET,
   1361    1.1       cgd 	"vop_bmap",
   1362    1.1       cgd 	0,
   1363    1.1       cgd 	vop_bmap_vp_offsets,
   1364    1.1       cgd 	VOPARG_OFFSETOF(struct vop_bmap_args, a_vpp),
   1365    1.1       cgd 	VDESC_NO_OFFSET,
   1366    1.1       cgd 	VDESC_NO_OFFSET,
   1367    1.1       cgd };
   1368   1.23   thorpej int
   1369   1.60   thorpej VOP_BMAP(struct vnode *vp,
   1370   1.60   thorpej     daddr_t bn,
   1371   1.60   thorpej     struct vnode **vpp,
   1372   1.60   thorpej     daddr_t *bnp,
   1373   1.60   thorpej     int *runp)
   1374   1.23   thorpej {
   1375   1.72        ad 	int error;
   1376   1.72        ad 	bool mpsafe;
   1377   1.23   thorpej 	struct vop_bmap_args a;
   1378  1.105   hannken 	struct mount *mp;
   1379   1.23   thorpej 	a.a_desc = VDESC(vop_bmap);
   1380   1.23   thorpej 	a.a_vp = vp;
   1381   1.23   thorpej 	a.a_bn = bn;
   1382   1.23   thorpej 	a.a_vpp = vpp;
   1383   1.23   thorpej 	a.a_bnp = bnp;
   1384   1.23   thorpej 	a.a_runp = runp;
   1385  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
   1386  1.105   hannken 	if (error)
   1387  1.105   hannken 		return error;
   1388   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_bmap), &a));
   1389  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
   1390   1.72        ad 	return error;
   1391   1.23   thorpej }
   1392    1.1       cgd 
   1393   1.46   hannken const int vop_strategy_vp_offsets[] = {
   1394   1.46   hannken 	VOPARG_OFFSETOF(struct vop_strategy_args,a_vp),
   1395   1.46   hannken 	VDESC_NO_OFFSET
   1396   1.46   hannken };
   1397   1.46   hannken const struct vnodeop_desc vop_strategy_desc = {
   1398   1.67     pooka 	VOP_STRATEGY_DESCOFFSET,
   1399   1.46   hannken 	"vop_strategy",
   1400   1.46   hannken 	0,
   1401   1.46   hannken 	vop_strategy_vp_offsets,
   1402   1.46   hannken 	VDESC_NO_OFFSET,
   1403   1.46   hannken 	VDESC_NO_OFFSET,
   1404   1.46   hannken 	VDESC_NO_OFFSET,
   1405   1.46   hannken };
   1406   1.46   hannken int
   1407   1.60   thorpej VOP_STRATEGY(struct vnode *vp,
   1408   1.60   thorpej     struct buf *bp)
   1409   1.46   hannken {
   1410   1.72        ad 	int error;
   1411   1.72        ad 	bool mpsafe;
   1412   1.46   hannken 	struct vop_strategy_args a;
   1413  1.105   hannken 	struct mount *mp;
   1414   1.46   hannken 	a.a_desc = VDESC(vop_strategy);
   1415   1.46   hannken 	a.a_vp = vp;
   1416   1.46   hannken 	a.a_bp = bp;
   1417  1.108   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_LAZY);
   1418  1.105   hannken 	if (error)
   1419  1.105   hannken 		return error;
   1420   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_strategy), &a));
   1421  1.108   hannken 	vop_post(vp, mp, mpsafe, FST_LAZY);
   1422   1.72        ad 	return error;
   1423   1.46   hannken }
   1424   1.46   hannken 
   1425   1.31  jdolecek const int vop_print_vp_offsets[] = {
   1426    1.1       cgd 	VOPARG_OFFSETOF(struct vop_print_args,a_vp),
   1427    1.1       cgd 	VDESC_NO_OFFSET
   1428    1.1       cgd };
   1429   1.33  jdolecek const struct vnodeop_desc vop_print_desc = {
   1430   1.67     pooka 	VOP_PRINT_DESCOFFSET,
   1431    1.1       cgd 	"vop_print",
   1432    1.1       cgd 	0,
   1433    1.1       cgd 	vop_print_vp_offsets,
   1434    1.1       cgd 	VDESC_NO_OFFSET,
   1435    1.1       cgd 	VDESC_NO_OFFSET,
   1436    1.1       cgd 	VDESC_NO_OFFSET,
   1437    1.1       cgd };
   1438   1.23   thorpej int
   1439   1.60   thorpej VOP_PRINT(struct vnode *vp)
   1440   1.23   thorpej {
   1441   1.72        ad 	int error;
   1442   1.72        ad 	bool mpsafe;
   1443   1.23   thorpej 	struct vop_print_args a;
   1444  1.105   hannken 	struct mount *mp;
   1445   1.23   thorpej 	a.a_desc = VDESC(vop_print);
   1446   1.23   thorpej 	a.a_vp = vp;
   1447  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
   1448  1.105   hannken 	if (error)
   1449  1.105   hannken 		return error;
   1450   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_print), &a));
   1451  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
   1452   1.72        ad 	return error;
   1453   1.23   thorpej }
   1454    1.1       cgd 
   1455   1.31  jdolecek const int vop_islocked_vp_offsets[] = {
   1456    1.1       cgd 	VOPARG_OFFSETOF(struct vop_islocked_args,a_vp),
   1457    1.1       cgd 	VDESC_NO_OFFSET
   1458    1.1       cgd };
   1459   1.33  jdolecek const struct vnodeop_desc vop_islocked_desc = {
   1460   1.67     pooka 	VOP_ISLOCKED_DESCOFFSET,
   1461    1.1       cgd 	"vop_islocked",
   1462    1.1       cgd 	0,
   1463    1.1       cgd 	vop_islocked_vp_offsets,
   1464    1.1       cgd 	VDESC_NO_OFFSET,
   1465    1.1       cgd 	VDESC_NO_OFFSET,
   1466    1.1       cgd 	VDESC_NO_OFFSET,
   1467    1.1       cgd };
   1468   1.23   thorpej int
   1469   1.60   thorpej VOP_ISLOCKED(struct vnode *vp)
   1470   1.23   thorpej {
   1471   1.72        ad 	int error;
   1472   1.72        ad 	bool mpsafe;
   1473   1.23   thorpej 	struct vop_islocked_args a;
   1474  1.105   hannken 	struct mount *mp;
   1475   1.23   thorpej 	a.a_desc = VDESC(vop_islocked);
   1476   1.23   thorpej 	a.a_vp = vp;
   1477  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1478  1.105   hannken 	if (error)
   1479  1.105   hannken 		return error;
   1480   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_islocked), &a));
   1481  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1482   1.72        ad 	return error;
   1483   1.23   thorpej }
   1484    1.1       cgd 
   1485   1.31  jdolecek const int vop_pathconf_vp_offsets[] = {
   1486    1.1       cgd 	VOPARG_OFFSETOF(struct vop_pathconf_args,a_vp),
   1487    1.1       cgd 	VDESC_NO_OFFSET
   1488    1.1       cgd };
   1489   1.33  jdolecek const struct vnodeop_desc vop_pathconf_desc = {
   1490   1.67     pooka 	VOP_PATHCONF_DESCOFFSET,
   1491    1.1       cgd 	"vop_pathconf",
   1492    1.1       cgd 	0,
   1493    1.1       cgd 	vop_pathconf_vp_offsets,
   1494    1.1       cgd 	VDESC_NO_OFFSET,
   1495    1.1       cgd 	VDESC_NO_OFFSET,
   1496    1.1       cgd 	VDESC_NO_OFFSET,
   1497    1.1       cgd };
   1498   1.23   thorpej int
   1499   1.60   thorpej VOP_PATHCONF(struct vnode *vp,
   1500   1.60   thorpej     int name,
   1501   1.60   thorpej     register_t *retval)
   1502   1.23   thorpej {
   1503   1.72        ad 	int error;
   1504   1.72        ad 	bool mpsafe;
   1505   1.23   thorpej 	struct vop_pathconf_args a;
   1506  1.105   hannken 	struct mount *mp;
   1507   1.23   thorpej 	a.a_desc = VDESC(vop_pathconf);
   1508   1.23   thorpej 	a.a_vp = vp;
   1509   1.23   thorpej 	a.a_name = name;
   1510   1.23   thorpej 	a.a_retval = retval;
   1511  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1512  1.105   hannken 	if (error)
   1513  1.105   hannken 		return error;
   1514   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_pathconf), &a));
   1515  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1516   1.72        ad 	return error;
   1517   1.23   thorpej }
   1518    1.1       cgd 
   1519   1.31  jdolecek const int vop_advlock_vp_offsets[] = {
   1520    1.1       cgd 	VOPARG_OFFSETOF(struct vop_advlock_args,a_vp),
   1521    1.1       cgd 	VDESC_NO_OFFSET
   1522    1.1       cgd };
   1523   1.33  jdolecek const struct vnodeop_desc vop_advlock_desc = {
   1524   1.67     pooka 	VOP_ADVLOCK_DESCOFFSET,
   1525    1.1       cgd 	"vop_advlock",
   1526    1.1       cgd 	0,
   1527    1.1       cgd 	vop_advlock_vp_offsets,
   1528    1.1       cgd 	VDESC_NO_OFFSET,
   1529    1.1       cgd 	VDESC_NO_OFFSET,
   1530    1.1       cgd 	VDESC_NO_OFFSET,
   1531    1.1       cgd };
   1532   1.23   thorpej int
   1533   1.60   thorpej VOP_ADVLOCK(struct vnode *vp,
   1534   1.60   thorpej     void *id,
   1535   1.60   thorpej     int op,
   1536   1.60   thorpej     struct flock *fl,
   1537   1.60   thorpej     int flags)
   1538   1.23   thorpej {
   1539   1.72        ad 	int error;
   1540   1.72        ad 	bool mpsafe;
   1541   1.23   thorpej 	struct vop_advlock_args a;
   1542  1.105   hannken 	struct mount *mp;
   1543   1.23   thorpej 	a.a_desc = VDESC(vop_advlock);
   1544   1.23   thorpej 	a.a_vp = vp;
   1545   1.23   thorpej 	a.a_id = id;
   1546   1.23   thorpej 	a.a_op = op;
   1547   1.23   thorpej 	a.a_fl = fl;
   1548   1.23   thorpej 	a.a_flags = flags;
   1549  1.107   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1550  1.105   hannken 	if (error)
   1551  1.105   hannken 		return error;
   1552   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_advlock), &a));
   1553  1.107   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1554   1.72        ad 	return error;
   1555   1.23   thorpej }
   1556    1.1       cgd 
   1557   1.31  jdolecek const int vop_whiteout_vp_offsets[] = {
   1558    1.1       cgd 	VOPARG_OFFSETOF(struct vop_whiteout_args,a_dvp),
   1559    1.1       cgd 	VDESC_NO_OFFSET
   1560    1.1       cgd };
   1561   1.33  jdolecek const struct vnodeop_desc vop_whiteout_desc = {
   1562   1.67     pooka 	VOP_WHITEOUT_DESCOFFSET,
   1563    1.1       cgd 	"vop_whiteout",
   1564    1.1       cgd 	0,
   1565    1.1       cgd 	vop_whiteout_vp_offsets,
   1566    1.1       cgd 	VDESC_NO_OFFSET,
   1567    1.1       cgd 	VDESC_NO_OFFSET,
   1568    1.1       cgd 	VOPARG_OFFSETOF(struct vop_whiteout_args, a_cnp),
   1569    1.1       cgd };
   1570   1.23   thorpej int
   1571   1.60   thorpej VOP_WHITEOUT(struct vnode *dvp,
   1572   1.60   thorpej     struct componentname *cnp,
   1573   1.60   thorpej     int flags)
   1574   1.23   thorpej {
   1575   1.72        ad 	int error;
   1576   1.72        ad 	bool mpsafe;
   1577   1.23   thorpej 	struct vop_whiteout_args a;
   1578  1.105   hannken 	struct mount *mp;
   1579   1.23   thorpej 	a.a_desc = VDESC(vop_whiteout);
   1580   1.23   thorpej 	a.a_dvp = dvp;
   1581   1.23   thorpej 	a.a_cnp = cnp;
   1582   1.23   thorpej 	a.a_flags = flags;
   1583  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
   1584  1.105   hannken 	if (error)
   1585  1.105   hannken 		return error;
   1586   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_whiteout), &a));
   1587  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
   1588   1.72        ad 	return error;
   1589   1.23   thorpej }
   1590    1.1       cgd 
   1591   1.31  jdolecek const int vop_getpages_vp_offsets[] = {
   1592   1.26       chs 	VOPARG_OFFSETOF(struct vop_getpages_args,a_vp),
   1593   1.26       chs 	VDESC_NO_OFFSET
   1594   1.26       chs };
   1595   1.33  jdolecek const struct vnodeop_desc vop_getpages_desc = {
   1596   1.67     pooka 	VOP_GETPAGES_DESCOFFSET,
   1597   1.26       chs 	"vop_getpages",
   1598   1.26       chs 	0,
   1599   1.26       chs 	vop_getpages_vp_offsets,
   1600   1.26       chs 	VDESC_NO_OFFSET,
   1601   1.26       chs 	VDESC_NO_OFFSET,
   1602   1.26       chs 	VDESC_NO_OFFSET,
   1603   1.26       chs };
   1604   1.26       chs int
   1605   1.60   thorpej VOP_GETPAGES(struct vnode *vp,
   1606   1.60   thorpej     voff_t offset,
   1607   1.60   thorpej     struct vm_page **m,
   1608   1.60   thorpej     int *count,
   1609   1.60   thorpej     int centeridx,
   1610   1.60   thorpej     vm_prot_t access_type,
   1611   1.60   thorpej     int advice,
   1612   1.60   thorpej     int flags)
   1613   1.26       chs {
   1614   1.72        ad 	int error;
   1615   1.72        ad 	bool mpsafe;
   1616   1.26       chs 	struct vop_getpages_args a;
   1617  1.105   hannken 	struct mount *mp;
   1618   1.26       chs 	a.a_desc = VDESC(vop_getpages);
   1619   1.26       chs 	a.a_vp = vp;
   1620   1.26       chs 	a.a_offset = offset;
   1621   1.26       chs 	a.a_m = m;
   1622   1.26       chs 	a.a_count = count;
   1623   1.26       chs 	a.a_centeridx = centeridx;
   1624   1.26       chs 	a.a_access_type = access_type;
   1625   1.26       chs 	a.a_advice = advice;
   1626   1.26       chs 	a.a_flags = flags;
   1627  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1628  1.105   hannken 	if (error)
   1629  1.105   hannken 		return error;
   1630   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_getpages), &a));
   1631  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1632   1.72        ad 	return error;
   1633   1.26       chs }
   1634   1.26       chs 
   1635   1.31  jdolecek const int vop_putpages_vp_offsets[] = {
   1636   1.26       chs 	VOPARG_OFFSETOF(struct vop_putpages_args,a_vp),
   1637   1.26       chs 	VDESC_NO_OFFSET
   1638   1.26       chs };
   1639   1.33  jdolecek const struct vnodeop_desc vop_putpages_desc = {
   1640   1.67     pooka 	VOP_PUTPAGES_DESCOFFSET,
   1641   1.26       chs 	"vop_putpages",
   1642   1.26       chs 	0,
   1643   1.26       chs 	vop_putpages_vp_offsets,
   1644   1.26       chs 	VDESC_NO_OFFSET,
   1645   1.26       chs 	VDESC_NO_OFFSET,
   1646   1.26       chs 	VDESC_NO_OFFSET,
   1647   1.26       chs };
   1648   1.26       chs int
   1649   1.60   thorpej VOP_PUTPAGES(struct vnode *vp,
   1650   1.60   thorpej     voff_t offlo,
   1651   1.60   thorpej     voff_t offhi,
   1652   1.60   thorpej     int flags)
   1653   1.26       chs {
   1654   1.72        ad 	int error;
   1655   1.72        ad 	bool mpsafe;
   1656   1.26       chs 	struct vop_putpages_args a;
   1657  1.105   hannken 	struct mount *mp;
   1658   1.26       chs 	a.a_desc = VDESC(vop_putpages);
   1659   1.26       chs 	a.a_vp = vp;
   1660   1.38       chs 	a.a_offlo = offlo;
   1661   1.38       chs 	a.a_offhi = offhi;
   1662   1.26       chs 	a.a_flags = flags;
   1663  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1664  1.105   hannken 	if (error)
   1665  1.105   hannken 		return error;
   1666   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_putpages), &a));
   1667  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1668   1.72        ad 	return error;
   1669   1.26       chs }
   1670   1.26       chs 
   1671  1.111  christos const int vop_getacl_vp_offsets[] = {
   1672  1.111  christos 	VOPARG_OFFSETOF(struct vop_getacl_args,a_vp),
   1673  1.111  christos 	VDESC_NO_OFFSET
   1674  1.111  christos };
   1675  1.111  christos const struct vnodeop_desc vop_getacl_desc = {
   1676  1.111  christos 	VOP_GETACL_DESCOFFSET,
   1677  1.111  christos 	"vop_getacl",
   1678  1.111  christos 	0,
   1679  1.111  christos 	vop_getacl_vp_offsets,
   1680  1.111  christos 	VDESC_NO_OFFSET,
   1681  1.111  christos 	VOPARG_OFFSETOF(struct vop_getacl_args, a_cred),
   1682  1.111  christos 	VDESC_NO_OFFSET,
   1683  1.111  christos };
   1684  1.111  christos int
   1685  1.111  christos VOP_GETACL(struct vnode *vp,
   1686  1.111  christos     acl_type_t type,
   1687  1.111  christos     struct acl *aclp,
   1688  1.111  christos     kauth_cred_t cred)
   1689  1.111  christos {
   1690  1.111  christos 	int error;
   1691  1.111  christos 	bool mpsafe;
   1692  1.111  christos 	struct vop_getacl_args a;
   1693  1.111  christos 	struct mount *mp;
   1694  1.111  christos 	a.a_desc = VDESC(vop_getacl);
   1695  1.111  christos 	a.a_vp = vp;
   1696  1.111  christos 	a.a_type = type;
   1697  1.111  christos 	a.a_aclp = aclp;
   1698  1.111  christos 	a.a_cred = cred;
   1699  1.111  christos 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
   1700  1.111  christos 	if (error)
   1701  1.111  christos 		return error;
   1702  1.111  christos 	error = (VCALL(vp, VOFFSET(vop_getacl), &a));
   1703  1.111  christos 	vop_post(vp, mp, mpsafe, FST_YES);
   1704  1.111  christos 	return error;
   1705  1.111  christos }
   1706  1.111  christos 
   1707  1.111  christos const int vop_setacl_vp_offsets[] = {
   1708  1.111  christos 	VOPARG_OFFSETOF(struct vop_setacl_args,a_vp),
   1709  1.111  christos 	VDESC_NO_OFFSET
   1710  1.111  christos };
   1711  1.111  christos const struct vnodeop_desc vop_setacl_desc = {
   1712  1.111  christos 	VOP_SETACL_DESCOFFSET,
   1713  1.111  christos 	"vop_setacl",
   1714  1.111  christos 	0,
   1715  1.111  christos 	vop_setacl_vp_offsets,
   1716  1.111  christos 	VDESC_NO_OFFSET,
   1717  1.111  christos 	VOPARG_OFFSETOF(struct vop_setacl_args, a_cred),
   1718  1.111  christos 	VDESC_NO_OFFSET,
   1719  1.111  christos };
   1720  1.111  christos int
   1721  1.111  christos VOP_SETACL(struct vnode *vp,
   1722  1.111  christos     acl_type_t type,
   1723  1.111  christos     struct acl *aclp,
   1724  1.111  christos     kauth_cred_t cred)
   1725  1.111  christos {
   1726  1.111  christos 	int error;
   1727  1.111  christos 	bool mpsafe;
   1728  1.111  christos 	struct vop_setacl_args a;
   1729  1.111  christos 	struct mount *mp;
   1730  1.111  christos 	a.a_desc = VDESC(vop_setacl);
   1731  1.111  christos 	a.a_vp = vp;
   1732  1.111  christos 	a.a_type = type;
   1733  1.111  christos 	a.a_aclp = aclp;
   1734  1.111  christos 	a.a_cred = cred;
   1735  1.111  christos 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
   1736  1.111  christos 	if (error)
   1737  1.111  christos 		return error;
   1738  1.111  christos 	error = (VCALL(vp, VOFFSET(vop_setacl), &a));
   1739  1.111  christos 	vop_post(vp, mp, mpsafe, FST_YES);
   1740  1.111  christos 	return error;
   1741  1.111  christos }
   1742  1.111  christos 
   1743  1.111  christos const int vop_aclcheck_vp_offsets[] = {
   1744  1.111  christos 	VOPARG_OFFSETOF(struct vop_aclcheck_args,a_vp),
   1745  1.111  christos 	VDESC_NO_OFFSET
   1746  1.111  christos };
   1747  1.111  christos const struct vnodeop_desc vop_aclcheck_desc = {
   1748  1.111  christos 	VOP_ACLCHECK_DESCOFFSET,
   1749  1.111  christos 	"vop_aclcheck",
   1750  1.111  christos 	0,
   1751  1.111  christos 	vop_aclcheck_vp_offsets,
   1752  1.111  christos 	VDESC_NO_OFFSET,
   1753  1.111  christos 	VOPARG_OFFSETOF(struct vop_aclcheck_args, a_cred),
   1754  1.111  christos 	VDESC_NO_OFFSET,
   1755  1.111  christos };
   1756  1.111  christos int
   1757  1.111  christos VOP_ACLCHECK(struct vnode *vp,
   1758  1.111  christos     acl_type_t type,
   1759  1.111  christos     struct acl *aclp,
   1760  1.111  christos     kauth_cred_t cred)
   1761  1.111  christos {
   1762  1.111  christos 	int error;
   1763  1.111  christos 	bool mpsafe;
   1764  1.111  christos 	struct vop_aclcheck_args a;
   1765  1.111  christos 	struct mount *mp;
   1766  1.111  christos 	a.a_desc = VDESC(vop_aclcheck);
   1767  1.111  christos 	a.a_vp = vp;
   1768  1.111  christos 	a.a_type = type;
   1769  1.111  christos 	a.a_aclp = aclp;
   1770  1.111  christos 	a.a_cred = cred;
   1771  1.111  christos 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
   1772  1.111  christos 	if (error)
   1773  1.111  christos 		return error;
   1774  1.111  christos 	error = (VCALL(vp, VOFFSET(vop_aclcheck), &a));
   1775  1.111  christos 	vop_post(vp, mp, mpsafe, FST_YES);
   1776  1.111  christos 	return error;
   1777  1.111  christos }
   1778  1.111  christos 
   1779   1.51   thorpej const int vop_closeextattr_vp_offsets[] = {
   1780   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_closeextattr_args,a_vp),
   1781   1.51   thorpej 	VDESC_NO_OFFSET
   1782   1.51   thorpej };
   1783   1.51   thorpej const struct vnodeop_desc vop_closeextattr_desc = {
   1784   1.67     pooka 	VOP_CLOSEEXTATTR_DESCOFFSET,
   1785   1.51   thorpej 	"vop_closeextattr",
   1786   1.51   thorpej 	0,
   1787   1.51   thorpej 	vop_closeextattr_vp_offsets,
   1788   1.51   thorpej 	VDESC_NO_OFFSET,
   1789   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_closeextattr_args, a_cred),
   1790   1.51   thorpej 	VDESC_NO_OFFSET,
   1791   1.51   thorpej };
   1792   1.51   thorpej int
   1793   1.60   thorpej VOP_CLOSEEXTATTR(struct vnode *vp,
   1794   1.60   thorpej     int commit,
   1795   1.73     pooka     kauth_cred_t cred)
   1796   1.51   thorpej {
   1797   1.72        ad 	int error;
   1798   1.72        ad 	bool mpsafe;
   1799   1.51   thorpej 	struct vop_closeextattr_args a;
   1800  1.105   hannken 	struct mount *mp;
   1801   1.51   thorpej 	a.a_desc = VDESC(vop_closeextattr);
   1802   1.51   thorpej 	a.a_vp = vp;
   1803   1.51   thorpej 	a.a_commit = commit;
   1804   1.51   thorpej 	a.a_cred = cred;
   1805  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1806  1.105   hannken 	if (error)
   1807  1.105   hannken 		return error;
   1808   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_closeextattr), &a));
   1809  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1810   1.72        ad 	return error;
   1811   1.51   thorpej }
   1812   1.51   thorpej 
   1813   1.51   thorpej const int vop_getextattr_vp_offsets[] = {
   1814   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_getextattr_args,a_vp),
   1815   1.51   thorpej 	VDESC_NO_OFFSET
   1816   1.51   thorpej };
   1817   1.51   thorpej const struct vnodeop_desc vop_getextattr_desc = {
   1818   1.67     pooka 	VOP_GETEXTATTR_DESCOFFSET,
   1819   1.51   thorpej 	"vop_getextattr",
   1820   1.51   thorpej 	0,
   1821   1.51   thorpej 	vop_getextattr_vp_offsets,
   1822   1.51   thorpej 	VDESC_NO_OFFSET,
   1823   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_getextattr_args, a_cred),
   1824   1.51   thorpej 	VDESC_NO_OFFSET,
   1825   1.51   thorpej };
   1826   1.51   thorpej int
   1827   1.60   thorpej VOP_GETEXTATTR(struct vnode *vp,
   1828   1.60   thorpej     int attrnamespace,
   1829   1.60   thorpej     const char *name,
   1830   1.60   thorpej     struct uio *uio,
   1831   1.60   thorpej     size_t *size,
   1832   1.73     pooka     kauth_cred_t cred)
   1833   1.51   thorpej {
   1834   1.72        ad 	int error;
   1835   1.72        ad 	bool mpsafe;
   1836   1.51   thorpej 	struct vop_getextattr_args a;
   1837  1.105   hannken 	struct mount *mp;
   1838   1.51   thorpej 	a.a_desc = VDESC(vop_getextattr);
   1839   1.51   thorpej 	a.a_vp = vp;
   1840   1.51   thorpej 	a.a_attrnamespace = attrnamespace;
   1841   1.51   thorpej 	a.a_name = name;
   1842   1.51   thorpej 	a.a_uio = uio;
   1843   1.51   thorpej 	a.a_size = size;
   1844   1.51   thorpej 	a.a_cred = cred;
   1845  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1846  1.105   hannken 	if (error)
   1847  1.105   hannken 		return error;
   1848   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_getextattr), &a));
   1849  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1850   1.72        ad 	return error;
   1851   1.51   thorpej }
   1852   1.51   thorpej 
   1853   1.51   thorpej const int vop_listextattr_vp_offsets[] = {
   1854   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_listextattr_args,a_vp),
   1855   1.51   thorpej 	VDESC_NO_OFFSET
   1856   1.51   thorpej };
   1857   1.51   thorpej const struct vnodeop_desc vop_listextattr_desc = {
   1858   1.67     pooka 	VOP_LISTEXTATTR_DESCOFFSET,
   1859   1.51   thorpej 	"vop_listextattr",
   1860   1.51   thorpej 	0,
   1861   1.51   thorpej 	vop_listextattr_vp_offsets,
   1862   1.51   thorpej 	VDESC_NO_OFFSET,
   1863   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_listextattr_args, a_cred),
   1864   1.51   thorpej 	VDESC_NO_OFFSET,
   1865   1.51   thorpej };
   1866   1.51   thorpej int
   1867   1.60   thorpej VOP_LISTEXTATTR(struct vnode *vp,
   1868   1.60   thorpej     int attrnamespace,
   1869   1.60   thorpej     struct uio *uio,
   1870   1.60   thorpej     size_t *size,
   1871   1.87      manu     int flag,
   1872   1.73     pooka     kauth_cred_t cred)
   1873   1.51   thorpej {
   1874   1.72        ad 	int error;
   1875   1.72        ad 	bool mpsafe;
   1876   1.51   thorpej 	struct vop_listextattr_args a;
   1877  1.105   hannken 	struct mount *mp;
   1878   1.51   thorpej 	a.a_desc = VDESC(vop_listextattr);
   1879   1.51   thorpej 	a.a_vp = vp;
   1880   1.51   thorpej 	a.a_attrnamespace = attrnamespace;
   1881   1.51   thorpej 	a.a_uio = uio;
   1882   1.51   thorpej 	a.a_size = size;
   1883   1.87      manu 	a.a_flag = flag;
   1884   1.51   thorpej 	a.a_cred = cred;
   1885  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1886  1.105   hannken 	if (error)
   1887  1.105   hannken 		return error;
   1888   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_listextattr), &a));
   1889  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1890   1.72        ad 	return error;
   1891   1.51   thorpej }
   1892   1.51   thorpej 
   1893   1.51   thorpej const int vop_openextattr_vp_offsets[] = {
   1894   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_openextattr_args,a_vp),
   1895   1.51   thorpej 	VDESC_NO_OFFSET
   1896   1.51   thorpej };
   1897   1.51   thorpej const struct vnodeop_desc vop_openextattr_desc = {
   1898   1.67     pooka 	VOP_OPENEXTATTR_DESCOFFSET,
   1899   1.51   thorpej 	"vop_openextattr",
   1900   1.51   thorpej 	0,
   1901   1.51   thorpej 	vop_openextattr_vp_offsets,
   1902   1.51   thorpej 	VDESC_NO_OFFSET,
   1903   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_openextattr_args, a_cred),
   1904   1.51   thorpej 	VDESC_NO_OFFSET,
   1905   1.51   thorpej };
   1906   1.51   thorpej int
   1907   1.60   thorpej VOP_OPENEXTATTR(struct vnode *vp,
   1908   1.73     pooka     kauth_cred_t cred)
   1909   1.51   thorpej {
   1910   1.72        ad 	int error;
   1911   1.72        ad 	bool mpsafe;
   1912   1.51   thorpej 	struct vop_openextattr_args a;
   1913  1.105   hannken 	struct mount *mp;
   1914   1.51   thorpej 	a.a_desc = VDESC(vop_openextattr);
   1915   1.51   thorpej 	a.a_vp = vp;
   1916   1.51   thorpej 	a.a_cred = cred;
   1917  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1918  1.105   hannken 	if (error)
   1919  1.105   hannken 		return error;
   1920   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_openextattr), &a));
   1921  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1922   1.72        ad 	return error;
   1923   1.51   thorpej }
   1924   1.51   thorpej 
   1925   1.51   thorpej const int vop_deleteextattr_vp_offsets[] = {
   1926   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_deleteextattr_args,a_vp),
   1927   1.51   thorpej 	VDESC_NO_OFFSET
   1928   1.51   thorpej };
   1929   1.51   thorpej const struct vnodeop_desc vop_deleteextattr_desc = {
   1930   1.67     pooka 	VOP_DELETEEXTATTR_DESCOFFSET,
   1931   1.51   thorpej 	"vop_deleteextattr",
   1932   1.51   thorpej 	0,
   1933   1.51   thorpej 	vop_deleteextattr_vp_offsets,
   1934   1.51   thorpej 	VDESC_NO_OFFSET,
   1935   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_deleteextattr_args, a_cred),
   1936   1.51   thorpej 	VDESC_NO_OFFSET,
   1937   1.51   thorpej };
   1938   1.51   thorpej int
   1939   1.60   thorpej VOP_DELETEEXTATTR(struct vnode *vp,
   1940   1.60   thorpej     int attrnamespace,
   1941   1.60   thorpej     const char *name,
   1942   1.73     pooka     kauth_cred_t cred)
   1943   1.51   thorpej {
   1944   1.72        ad 	int error;
   1945   1.72        ad 	bool mpsafe;
   1946   1.51   thorpej 	struct vop_deleteextattr_args a;
   1947  1.105   hannken 	struct mount *mp;
   1948   1.51   thorpej 	a.a_desc = VDESC(vop_deleteextattr);
   1949   1.51   thorpej 	a.a_vp = vp;
   1950   1.51   thorpej 	a.a_attrnamespace = attrnamespace;
   1951   1.51   thorpej 	a.a_name = name;
   1952   1.51   thorpej 	a.a_cred = cred;
   1953  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1954  1.105   hannken 	if (error)
   1955  1.105   hannken 		return error;
   1956   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_deleteextattr), &a));
   1957  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1958   1.72        ad 	return error;
   1959   1.51   thorpej }
   1960   1.51   thorpej 
   1961   1.51   thorpej const int vop_setextattr_vp_offsets[] = {
   1962   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_setextattr_args,a_vp),
   1963   1.51   thorpej 	VDESC_NO_OFFSET
   1964   1.51   thorpej };
   1965   1.51   thorpej const struct vnodeop_desc vop_setextattr_desc = {
   1966   1.67     pooka 	VOP_SETEXTATTR_DESCOFFSET,
   1967   1.51   thorpej 	"vop_setextattr",
   1968   1.51   thorpej 	0,
   1969   1.51   thorpej 	vop_setextattr_vp_offsets,
   1970   1.51   thorpej 	VDESC_NO_OFFSET,
   1971   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_setextattr_args, a_cred),
   1972   1.51   thorpej 	VDESC_NO_OFFSET,
   1973   1.51   thorpej };
   1974   1.51   thorpej int
   1975   1.60   thorpej VOP_SETEXTATTR(struct vnode *vp,
   1976   1.60   thorpej     int attrnamespace,
   1977   1.60   thorpej     const char *name,
   1978   1.60   thorpej     struct uio *uio,
   1979   1.73     pooka     kauth_cred_t cred)
   1980   1.51   thorpej {
   1981   1.72        ad 	int error;
   1982   1.72        ad 	bool mpsafe;
   1983   1.51   thorpej 	struct vop_setextattr_args a;
   1984  1.105   hannken 	struct mount *mp;
   1985   1.51   thorpej 	a.a_desc = VDESC(vop_setextattr);
   1986   1.51   thorpej 	a.a_vp = vp;
   1987   1.51   thorpej 	a.a_attrnamespace = attrnamespace;
   1988   1.51   thorpej 	a.a_name = name;
   1989   1.51   thorpej 	a.a_uio = uio;
   1990   1.51   thorpej 	a.a_cred = cred;
   1991  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1992  1.105   hannken 	if (error)
   1993  1.105   hannken 		return error;
   1994   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_setextattr), &a));
   1995  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1996   1.72        ad 	return error;
   1997   1.51   thorpej }
   1998   1.51   thorpej 
   1999   1.33  jdolecek const struct vnodeop_desc * const vfs_op_descs[] = {
   2000    1.1       cgd 	&vop_default_desc,	/* MUST BE FIRST */
   2001    1.1       cgd 
   2002   1.88   hannken 	&vop_bwrite_desc,
   2003    1.1       cgd 	&vop_lookup_desc,
   2004    1.1       cgd 	&vop_create_desc,
   2005    1.1       cgd 	&vop_mknod_desc,
   2006    1.1       cgd 	&vop_open_desc,
   2007    1.1       cgd 	&vop_close_desc,
   2008    1.1       cgd 	&vop_access_desc,
   2009  1.111  christos 	&vop_accessx_desc,
   2010    1.1       cgd 	&vop_getattr_desc,
   2011    1.1       cgd 	&vop_setattr_desc,
   2012    1.1       cgd 	&vop_read_desc,
   2013    1.1       cgd 	&vop_write_desc,
   2014   1.93  dholland 	&vop_fallocate_desc,
   2015   1.93  dholland 	&vop_fdiscard_desc,
   2016    1.1       cgd 	&vop_ioctl_desc,
   2017   1.18  wrstuden 	&vop_fcntl_desc,
   2018    1.3   mycroft 	&vop_poll_desc,
   2019   1.40  jdolecek 	&vop_kqfilter_desc,
   2020   1.10      fvdl 	&vop_revoke_desc,
   2021    1.1       cgd 	&vop_mmap_desc,
   2022    1.1       cgd 	&vop_fsync_desc,
   2023    1.1       cgd 	&vop_seek_desc,
   2024    1.1       cgd 	&vop_remove_desc,
   2025    1.1       cgd 	&vop_link_desc,
   2026    1.1       cgd 	&vop_rename_desc,
   2027    1.1       cgd 	&vop_mkdir_desc,
   2028    1.1       cgd 	&vop_rmdir_desc,
   2029    1.1       cgd 	&vop_symlink_desc,
   2030    1.1       cgd 	&vop_readdir_desc,
   2031    1.1       cgd 	&vop_readlink_desc,
   2032    1.1       cgd 	&vop_abortop_desc,
   2033    1.1       cgd 	&vop_inactive_desc,
   2034    1.1       cgd 	&vop_reclaim_desc,
   2035    1.1       cgd 	&vop_lock_desc,
   2036    1.1       cgd 	&vop_unlock_desc,
   2037    1.1       cgd 	&vop_bmap_desc,
   2038   1.46   hannken 	&vop_strategy_desc,
   2039    1.1       cgd 	&vop_print_desc,
   2040    1.1       cgd 	&vop_islocked_desc,
   2041    1.1       cgd 	&vop_pathconf_desc,
   2042    1.1       cgd 	&vop_advlock_desc,
   2043    1.1       cgd 	&vop_whiteout_desc,
   2044   1.26       chs 	&vop_getpages_desc,
   2045   1.26       chs 	&vop_putpages_desc,
   2046  1.111  christos 	&vop_getacl_desc,
   2047  1.111  christos 	&vop_setacl_desc,
   2048  1.111  christos 	&vop_aclcheck_desc,
   2049   1.51   thorpej 	&vop_closeextattr_desc,
   2050   1.51   thorpej 	&vop_getextattr_desc,
   2051   1.51   thorpej 	&vop_listextattr_desc,
   2052   1.51   thorpej 	&vop_openextattr_desc,
   2053   1.51   thorpej 	&vop_deleteextattr_desc,
   2054   1.51   thorpej 	&vop_setextattr_desc,
   2055    1.1       cgd 	NULL
   2056    1.1       cgd };
   2057