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