Home | History | Annotate | Line # | Download | only in kern
vnode_if.c revision 1.108
      1  1.108   hannken /*	$NetBSD: vnode_if.c,v 1.108 2019/10/11 08:05:19 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.107   hannken  *	NetBSD: vnode_if.src,v 1.77 2017/07/12 09:31:07 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.108   hannken __KERNEL_RCSID(0, "$NetBSD: vnode_if.c,v 1.108 2019/10/11 08:05:19 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.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.60   thorpej     int mode,
    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.23   thorpej 	a.a_mode = mode;
    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.31  jdolecek const int vop_getattr_vp_offsets[] = {
    372    1.1       cgd 	VOPARG_OFFSETOF(struct vop_getattr_args,a_vp),
    373    1.1       cgd 	VDESC_NO_OFFSET
    374    1.1       cgd };
    375   1.33  jdolecek const struct vnodeop_desc vop_getattr_desc = {
    376   1.67     pooka 	VOP_GETATTR_DESCOFFSET,
    377    1.1       cgd 	"vop_getattr",
    378    1.1       cgd 	0,
    379    1.1       cgd 	vop_getattr_vp_offsets,
    380    1.1       cgd 	VDESC_NO_OFFSET,
    381    1.1       cgd 	VOPARG_OFFSETOF(struct vop_getattr_args, a_cred),
    382    1.1       cgd 	VDESC_NO_OFFSET,
    383    1.1       cgd };
    384   1.23   thorpej int
    385   1.60   thorpej VOP_GETATTR(struct vnode *vp,
    386   1.60   thorpej     struct vattr *vap,
    387   1.73     pooka     kauth_cred_t cred)
    388   1.23   thorpej {
    389   1.72        ad 	int error;
    390   1.72        ad 	bool mpsafe;
    391   1.23   thorpej 	struct vop_getattr_args a;
    392  1.105   hannken 	struct mount *mp;
    393   1.23   thorpej 	a.a_desc = VDESC(vop_getattr);
    394   1.23   thorpej 	a.a_vp = vp;
    395   1.23   thorpej 	a.a_vap = vap;
    396   1.23   thorpej 	a.a_cred = cred;
    397  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    398  1.105   hannken 	if (error)
    399  1.105   hannken 		return error;
    400   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_getattr), &a));
    401  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    402   1.72        ad 	return error;
    403   1.23   thorpej }
    404    1.1       cgd 
    405   1.31  jdolecek const int vop_setattr_vp_offsets[] = {
    406    1.1       cgd 	VOPARG_OFFSETOF(struct vop_setattr_args,a_vp),
    407    1.1       cgd 	VDESC_NO_OFFSET
    408    1.1       cgd };
    409   1.33  jdolecek const struct vnodeop_desc vop_setattr_desc = {
    410   1.67     pooka 	VOP_SETATTR_DESCOFFSET,
    411    1.1       cgd 	"vop_setattr",
    412    1.1       cgd 	0,
    413    1.1       cgd 	vop_setattr_vp_offsets,
    414    1.1       cgd 	VDESC_NO_OFFSET,
    415    1.1       cgd 	VOPARG_OFFSETOF(struct vop_setattr_args, a_cred),
    416    1.1       cgd 	VDESC_NO_OFFSET,
    417    1.1       cgd };
    418   1.23   thorpej int
    419   1.60   thorpej VOP_SETATTR(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_setattr_args a;
    426  1.105   hannken 	struct mount *mp;
    427   1.23   thorpej 	a.a_desc = VDESC(vop_setattr);
    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_setattr), &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_read_vp_offsets[] = {
    440    1.1       cgd 	VOPARG_OFFSETOF(struct vop_read_args,a_vp),
    441    1.1       cgd 	VDESC_NO_OFFSET
    442    1.1       cgd };
    443   1.33  jdolecek const struct vnodeop_desc vop_read_desc = {
    444   1.67     pooka 	VOP_READ_DESCOFFSET,
    445    1.1       cgd 	"vop_read",
    446    1.1       cgd 	0,
    447    1.1       cgd 	vop_read_vp_offsets,
    448    1.1       cgd 	VDESC_NO_OFFSET,
    449    1.1       cgd 	VOPARG_OFFSETOF(struct vop_read_args, a_cred),
    450    1.1       cgd 	VDESC_NO_OFFSET,
    451    1.1       cgd };
    452   1.23   thorpej int
    453   1.60   thorpej VOP_READ(struct vnode *vp,
    454   1.60   thorpej     struct uio *uio,
    455   1.60   thorpej     int ioflag,
    456   1.65      elad     kauth_cred_t cred)
    457   1.23   thorpej {
    458   1.72        ad 	int error;
    459   1.72        ad 	bool mpsafe;
    460   1.23   thorpej 	struct vop_read_args a;
    461  1.105   hannken 	struct mount *mp;
    462   1.23   thorpej 	a.a_desc = VDESC(vop_read);
    463   1.23   thorpej 	a.a_vp = vp;
    464   1.23   thorpej 	a.a_uio = uio;
    465   1.23   thorpej 	a.a_ioflag = ioflag;
    466   1.23   thorpej 	a.a_cred = cred;
    467  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    468  1.105   hannken 	if (error)
    469  1.105   hannken 		return error;
    470   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_read), &a));
    471  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    472   1.72        ad 	return error;
    473   1.23   thorpej }
    474    1.1       cgd 
    475   1.31  jdolecek const int vop_write_vp_offsets[] = {
    476    1.1       cgd 	VOPARG_OFFSETOF(struct vop_write_args,a_vp),
    477    1.1       cgd 	VDESC_NO_OFFSET
    478    1.1       cgd };
    479   1.33  jdolecek const struct vnodeop_desc vop_write_desc = {
    480   1.67     pooka 	VOP_WRITE_DESCOFFSET,
    481    1.1       cgd 	"vop_write",
    482    1.1       cgd 	0,
    483    1.1       cgd 	vop_write_vp_offsets,
    484    1.1       cgd 	VDESC_NO_OFFSET,
    485    1.1       cgd 	VOPARG_OFFSETOF(struct vop_write_args, a_cred),
    486    1.1       cgd 	VDESC_NO_OFFSET,
    487    1.1       cgd };
    488   1.23   thorpej int
    489   1.60   thorpej VOP_WRITE(struct vnode *vp,
    490   1.60   thorpej     struct uio *uio,
    491   1.60   thorpej     int ioflag,
    492   1.65      elad     kauth_cred_t cred)
    493   1.23   thorpej {
    494   1.72        ad 	int error;
    495   1.72        ad 	bool mpsafe;
    496   1.23   thorpej 	struct vop_write_args a;
    497  1.105   hannken 	struct mount *mp;
    498   1.23   thorpej 	a.a_desc = VDESC(vop_write);
    499   1.23   thorpej 	a.a_vp = vp;
    500   1.23   thorpej 	a.a_uio = uio;
    501   1.23   thorpej 	a.a_ioflag = ioflag;
    502   1.23   thorpej 	a.a_cred = cred;
    503  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    504  1.105   hannken 	if (error)
    505  1.105   hannken 		return error;
    506   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_write), &a));
    507  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    508   1.72        ad 	return error;
    509   1.23   thorpej }
    510    1.1       cgd 
    511   1.93  dholland const int vop_fallocate_vp_offsets[] = {
    512   1.93  dholland 	VOPARG_OFFSETOF(struct vop_fallocate_args,a_vp),
    513   1.93  dholland 	VDESC_NO_OFFSET
    514   1.93  dholland };
    515   1.93  dholland const struct vnodeop_desc vop_fallocate_desc = {
    516   1.93  dholland 	VOP_FALLOCATE_DESCOFFSET,
    517   1.93  dholland 	"vop_fallocate",
    518   1.93  dholland 	0,
    519   1.93  dholland 	vop_fallocate_vp_offsets,
    520   1.93  dholland 	VDESC_NO_OFFSET,
    521   1.93  dholland 	VDESC_NO_OFFSET,
    522   1.93  dholland 	VDESC_NO_OFFSET,
    523   1.93  dholland };
    524   1.93  dholland int
    525   1.93  dholland VOP_FALLOCATE(struct vnode *vp,
    526   1.93  dholland     off_t pos,
    527   1.93  dholland     off_t len)
    528   1.93  dholland {
    529   1.93  dholland 	int error;
    530   1.93  dholland 	bool mpsafe;
    531   1.93  dholland 	struct vop_fallocate_args a;
    532  1.105   hannken 	struct mount *mp;
    533   1.93  dholland 	a.a_desc = VDESC(vop_fallocate);
    534   1.93  dholland 	a.a_vp = vp;
    535   1.93  dholland 	a.a_pos = pos;
    536   1.93  dholland 	a.a_len = len;
    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.93  dholland 	error = (VCALL(vp, VOFFSET(vop_fallocate), &a));
    541  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    542   1.93  dholland 	return error;
    543   1.93  dholland }
    544   1.93  dholland 
    545   1.93  dholland const int vop_fdiscard_vp_offsets[] = {
    546   1.93  dholland 	VOPARG_OFFSETOF(struct vop_fdiscard_args,a_vp),
    547   1.93  dholland 	VDESC_NO_OFFSET
    548   1.93  dholland };
    549   1.93  dholland const struct vnodeop_desc vop_fdiscard_desc = {
    550   1.93  dholland 	VOP_FDISCARD_DESCOFFSET,
    551   1.93  dholland 	"vop_fdiscard",
    552   1.93  dholland 	0,
    553   1.93  dholland 	vop_fdiscard_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_FDISCARD(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_fdiscard_args a;
    566  1.105   hannken 	struct mount *mp;
    567   1.93  dholland 	a.a_desc = VDESC(vop_fdiscard);
    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_fdiscard), &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.31  jdolecek const int vop_ioctl_vp_offsets[] = {
    580    1.1       cgd 	VOPARG_OFFSETOF(struct vop_ioctl_args,a_vp),
    581    1.1       cgd 	VDESC_NO_OFFSET
    582    1.1       cgd };
    583   1.33  jdolecek const struct vnodeop_desc vop_ioctl_desc = {
    584   1.67     pooka 	VOP_IOCTL_DESCOFFSET,
    585    1.1       cgd 	"vop_ioctl",
    586    1.1       cgd 	0,
    587    1.1       cgd 	vop_ioctl_vp_offsets,
    588    1.1       cgd 	VDESC_NO_OFFSET,
    589    1.1       cgd 	VOPARG_OFFSETOF(struct vop_ioctl_args, a_cred),
    590    1.1       cgd 	VDESC_NO_OFFSET,
    591    1.1       cgd };
    592   1.23   thorpej int
    593   1.60   thorpej VOP_IOCTL(struct vnode *vp,
    594   1.60   thorpej     u_long command,
    595   1.60   thorpej     void *data,
    596   1.60   thorpej     int fflag,
    597   1.73     pooka     kauth_cred_t cred)
    598   1.23   thorpej {
    599   1.72        ad 	int error;
    600   1.72        ad 	bool mpsafe;
    601   1.23   thorpej 	struct vop_ioctl_args a;
    602  1.105   hannken 	struct mount *mp;
    603   1.23   thorpej 	a.a_desc = VDESC(vop_ioctl);
    604   1.23   thorpej 	a.a_vp = vp;
    605   1.23   thorpej 	a.a_command = command;
    606   1.23   thorpej 	a.a_data = data;
    607   1.23   thorpej 	a.a_fflag = fflag;
    608   1.23   thorpej 	a.a_cred = cred;
    609  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    610  1.105   hannken 	if (error)
    611  1.105   hannken 		return error;
    612   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_ioctl), &a));
    613  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    614   1.72        ad 	return error;
    615   1.23   thorpej }
    616    1.1       cgd 
    617   1.31  jdolecek const int vop_fcntl_vp_offsets[] = {
    618   1.18  wrstuden 	VOPARG_OFFSETOF(struct vop_fcntl_args,a_vp),
    619   1.18  wrstuden 	VDESC_NO_OFFSET
    620   1.18  wrstuden };
    621   1.33  jdolecek const struct vnodeop_desc vop_fcntl_desc = {
    622   1.67     pooka 	VOP_FCNTL_DESCOFFSET,
    623   1.18  wrstuden 	"vop_fcntl",
    624   1.18  wrstuden 	0,
    625   1.18  wrstuden 	vop_fcntl_vp_offsets,
    626   1.18  wrstuden 	VDESC_NO_OFFSET,
    627   1.18  wrstuden 	VOPARG_OFFSETOF(struct vop_fcntl_args, a_cred),
    628   1.18  wrstuden 	VDESC_NO_OFFSET,
    629   1.18  wrstuden };
    630   1.23   thorpej int
    631   1.60   thorpej VOP_FCNTL(struct vnode *vp,
    632   1.60   thorpej     u_int command,
    633   1.60   thorpej     void *data,
    634   1.60   thorpej     int fflag,
    635   1.73     pooka     kauth_cred_t cred)
    636   1.23   thorpej {
    637   1.72        ad 	int error;
    638   1.72        ad 	bool mpsafe;
    639   1.23   thorpej 	struct vop_fcntl_args a;
    640  1.105   hannken 	struct mount *mp;
    641   1.23   thorpej 	a.a_desc = VDESC(vop_fcntl);
    642   1.23   thorpej 	a.a_vp = vp;
    643   1.23   thorpej 	a.a_command = command;
    644   1.23   thorpej 	a.a_data = data;
    645   1.23   thorpej 	a.a_fflag = fflag;
    646   1.23   thorpej 	a.a_cred = cred;
    647  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    648  1.105   hannken 	if (error)
    649  1.105   hannken 		return error;
    650   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_fcntl), &a));
    651  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    652   1.72        ad 	return error;
    653   1.23   thorpej }
    654   1.18  wrstuden 
    655   1.31  jdolecek const int vop_poll_vp_offsets[] = {
    656    1.3   mycroft 	VOPARG_OFFSETOF(struct vop_poll_args,a_vp),
    657    1.1       cgd 	VDESC_NO_OFFSET
    658    1.1       cgd };
    659   1.33  jdolecek const struct vnodeop_desc vop_poll_desc = {
    660   1.67     pooka 	VOP_POLL_DESCOFFSET,
    661    1.3   mycroft 	"vop_poll",
    662    1.1       cgd 	0,
    663    1.3   mycroft 	vop_poll_vp_offsets,
    664    1.1       cgd 	VDESC_NO_OFFSET,
    665    1.3   mycroft 	VDESC_NO_OFFSET,
    666    1.1       cgd 	VDESC_NO_OFFSET,
    667    1.1       cgd };
    668   1.23   thorpej int
    669   1.60   thorpej VOP_POLL(struct vnode *vp,
    670   1.73     pooka     int events)
    671   1.23   thorpej {
    672   1.72        ad 	int error;
    673   1.72        ad 	bool mpsafe;
    674   1.23   thorpej 	struct vop_poll_args a;
    675  1.105   hannken 	struct mount *mp;
    676   1.23   thorpej 	a.a_desc = VDESC(vop_poll);
    677   1.23   thorpej 	a.a_vp = vp;
    678   1.23   thorpej 	a.a_events = events;
    679  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    680  1.105   hannken 	if (error)
    681  1.105   hannken 		return error;
    682   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_poll), &a));
    683  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    684   1.72        ad 	return error;
    685   1.23   thorpej }
    686    1.1       cgd 
    687   1.40  jdolecek const int vop_kqfilter_vp_offsets[] = {
    688   1.40  jdolecek 	VOPARG_OFFSETOF(struct vop_kqfilter_args,a_vp),
    689   1.40  jdolecek 	VDESC_NO_OFFSET
    690   1.40  jdolecek };
    691   1.40  jdolecek const struct vnodeop_desc vop_kqfilter_desc = {
    692   1.67     pooka 	VOP_KQFILTER_DESCOFFSET,
    693   1.40  jdolecek 	"vop_kqfilter",
    694   1.40  jdolecek 	0,
    695   1.40  jdolecek 	vop_kqfilter_vp_offsets,
    696   1.40  jdolecek 	VDESC_NO_OFFSET,
    697   1.40  jdolecek 	VDESC_NO_OFFSET,
    698   1.40  jdolecek 	VDESC_NO_OFFSET,
    699   1.40  jdolecek };
    700   1.40  jdolecek int
    701   1.60   thorpej VOP_KQFILTER(struct vnode *vp,
    702   1.60   thorpej     struct knote *kn)
    703   1.40  jdolecek {
    704   1.72        ad 	int error;
    705   1.72        ad 	bool mpsafe;
    706   1.40  jdolecek 	struct vop_kqfilter_args a;
    707  1.105   hannken 	struct mount *mp;
    708   1.40  jdolecek 	a.a_desc = VDESC(vop_kqfilter);
    709   1.40  jdolecek 	a.a_vp = vp;
    710   1.40  jdolecek 	a.a_kn = kn;
    711  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    712  1.105   hannken 	if (error)
    713  1.105   hannken 		return error;
    714   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_kqfilter), &a));
    715  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    716   1.72        ad 	return error;
    717   1.40  jdolecek }
    718   1.40  jdolecek 
    719   1.31  jdolecek const int vop_revoke_vp_offsets[] = {
    720   1.10      fvdl 	VOPARG_OFFSETOF(struct vop_revoke_args,a_vp),
    721   1.10      fvdl 	VDESC_NO_OFFSET
    722   1.10      fvdl };
    723   1.33  jdolecek const struct vnodeop_desc vop_revoke_desc = {
    724   1.67     pooka 	VOP_REVOKE_DESCOFFSET,
    725   1.10      fvdl 	"vop_revoke",
    726   1.10      fvdl 	0,
    727   1.10      fvdl 	vop_revoke_vp_offsets,
    728   1.10      fvdl 	VDESC_NO_OFFSET,
    729   1.10      fvdl 	VDESC_NO_OFFSET,
    730   1.10      fvdl 	VDESC_NO_OFFSET,
    731   1.10      fvdl };
    732   1.23   thorpej int
    733   1.60   thorpej VOP_REVOKE(struct vnode *vp,
    734   1.60   thorpej     int flags)
    735   1.23   thorpej {
    736   1.72        ad 	int error;
    737   1.72        ad 	bool mpsafe;
    738   1.23   thorpej 	struct vop_revoke_args a;
    739  1.105   hannken 	struct mount *mp;
    740   1.23   thorpej 	a.a_desc = VDESC(vop_revoke);
    741   1.23   thorpej 	a.a_vp = vp;
    742   1.23   thorpej 	a.a_flags = flags;
    743  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    744  1.105   hannken 	if (error)
    745  1.105   hannken 		return error;
    746   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_revoke), &a));
    747  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    748   1.72        ad 	return error;
    749   1.23   thorpej }
    750   1.10      fvdl 
    751   1.31  jdolecek const int vop_mmap_vp_offsets[] = {
    752    1.1       cgd 	VOPARG_OFFSETOF(struct vop_mmap_args,a_vp),
    753    1.1       cgd 	VDESC_NO_OFFSET
    754    1.1       cgd };
    755   1.33  jdolecek const struct vnodeop_desc vop_mmap_desc = {
    756   1.67     pooka 	VOP_MMAP_DESCOFFSET,
    757    1.1       cgd 	"vop_mmap",
    758    1.1       cgd 	0,
    759    1.1       cgd 	vop_mmap_vp_offsets,
    760    1.1       cgd 	VDESC_NO_OFFSET,
    761    1.1       cgd 	VOPARG_OFFSETOF(struct vop_mmap_args, a_cred),
    762    1.1       cgd 	VDESC_NO_OFFSET,
    763    1.1       cgd };
    764   1.23   thorpej int
    765   1.60   thorpej VOP_MMAP(struct vnode *vp,
    766   1.70     pooka     vm_prot_t prot,
    767   1.73     pooka     kauth_cred_t cred)
    768   1.23   thorpej {
    769   1.72        ad 	int error;
    770   1.72        ad 	bool mpsafe;
    771   1.23   thorpej 	struct vop_mmap_args a;
    772  1.105   hannken 	struct mount *mp;
    773   1.23   thorpej 	a.a_desc = VDESC(vop_mmap);
    774   1.23   thorpej 	a.a_vp = vp;
    775   1.70     pooka 	a.a_prot = prot;
    776   1.23   thorpej 	a.a_cred = cred;
    777  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    778  1.105   hannken 	if (error)
    779  1.105   hannken 		return error;
    780   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_mmap), &a));
    781  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    782   1.72        ad 	return error;
    783   1.23   thorpej }
    784    1.1       cgd 
    785   1.31  jdolecek const int vop_fsync_vp_offsets[] = {
    786    1.1       cgd 	VOPARG_OFFSETOF(struct vop_fsync_args,a_vp),
    787    1.1       cgd 	VDESC_NO_OFFSET
    788    1.1       cgd };
    789   1.33  jdolecek const struct vnodeop_desc vop_fsync_desc = {
    790   1.67     pooka 	VOP_FSYNC_DESCOFFSET,
    791    1.1       cgd 	"vop_fsync",
    792    1.1       cgd 	0,
    793    1.1       cgd 	vop_fsync_vp_offsets,
    794    1.1       cgd 	VDESC_NO_OFFSET,
    795    1.1       cgd 	VOPARG_OFFSETOF(struct vop_fsync_args, a_cred),
    796    1.1       cgd 	VDESC_NO_OFFSET,
    797    1.1       cgd };
    798   1.23   thorpej int
    799   1.60   thorpej VOP_FSYNC(struct vnode *vp,
    800   1.65      elad     kauth_cred_t cred,
    801   1.60   thorpej     int flags,
    802   1.60   thorpej     off_t offlo,
    803   1.73     pooka     off_t offhi)
    804   1.23   thorpej {
    805   1.72        ad 	int error;
    806   1.72        ad 	bool mpsafe;
    807   1.23   thorpej 	struct vop_fsync_args a;
    808  1.105   hannken 	struct mount *mp;
    809   1.23   thorpej 	a.a_desc = VDESC(vop_fsync);
    810   1.23   thorpej 	a.a_vp = vp;
    811   1.23   thorpej 	a.a_cred = cred;
    812   1.23   thorpej 	a.a_flags = flags;
    813   1.25      fvdl 	a.a_offlo = offlo;
    814   1.25      fvdl 	a.a_offhi = offhi;
    815  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
    816  1.105   hannken 	if (error)
    817  1.105   hannken 		return error;
    818   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_fsync), &a));
    819  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
    820   1.72        ad 	return error;
    821   1.23   thorpej }
    822    1.1       cgd 
    823   1.31  jdolecek const int vop_seek_vp_offsets[] = {
    824    1.1       cgd 	VOPARG_OFFSETOF(struct vop_seek_args,a_vp),
    825    1.1       cgd 	VDESC_NO_OFFSET
    826    1.1       cgd };
    827   1.33  jdolecek const struct vnodeop_desc vop_seek_desc = {
    828   1.67     pooka 	VOP_SEEK_DESCOFFSET,
    829    1.1       cgd 	"vop_seek",
    830    1.1       cgd 	0,
    831    1.1       cgd 	vop_seek_vp_offsets,
    832    1.1       cgd 	VDESC_NO_OFFSET,
    833    1.1       cgd 	VOPARG_OFFSETOF(struct vop_seek_args, a_cred),
    834    1.1       cgd 	VDESC_NO_OFFSET,
    835    1.1       cgd };
    836   1.23   thorpej int
    837   1.60   thorpej VOP_SEEK(struct vnode *vp,
    838   1.60   thorpej     off_t oldoff,
    839   1.60   thorpej     off_t newoff,
    840   1.65      elad     kauth_cred_t cred)
    841   1.23   thorpej {
    842   1.72        ad 	int error;
    843   1.72        ad 	bool mpsafe;
    844   1.23   thorpej 	struct vop_seek_args a;
    845  1.105   hannken 	struct mount *mp;
    846   1.23   thorpej 	a.a_desc = VDESC(vop_seek);
    847   1.23   thorpej 	a.a_vp = vp;
    848   1.23   thorpej 	a.a_oldoff = oldoff;
    849   1.23   thorpej 	a.a_newoff = newoff;
    850   1.23   thorpej 	a.a_cred = cred;
    851  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
    852  1.105   hannken 	if (error)
    853  1.105   hannken 		return error;
    854   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_seek), &a));
    855  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
    856   1.72        ad 	return error;
    857   1.23   thorpej }
    858    1.1       cgd 
    859   1.31  jdolecek const int vop_remove_vp_offsets[] = {
    860  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_remove_v2_args,a_dvp),
    861  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_remove_v2_args,a_vp),
    862    1.1       cgd 	VDESC_NO_OFFSET
    863    1.1       cgd };
    864   1.33  jdolecek const struct vnodeop_desc vop_remove_desc = {
    865   1.67     pooka 	VOP_REMOVE_DESCOFFSET,
    866    1.1       cgd 	"vop_remove",
    867  1.103  riastrad 	0 | VDESC_VP1_WILLPUT,
    868    1.1       cgd 	vop_remove_vp_offsets,
    869    1.1       cgd 	VDESC_NO_OFFSET,
    870    1.1       cgd 	VDESC_NO_OFFSET,
    871  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_remove_v2_args, a_cnp),
    872    1.1       cgd };
    873   1.23   thorpej int
    874   1.60   thorpej VOP_REMOVE(struct vnode *dvp,
    875   1.60   thorpej     struct vnode *vp,
    876   1.60   thorpej     struct componentname *cnp)
    877   1.23   thorpej {
    878   1.72        ad 	int error;
    879   1.72        ad 	bool mpsafe;
    880  1.103  riastrad 	struct vop_remove_v2_args a;
    881  1.105   hannken 	struct mount *mp;
    882   1.23   thorpej 	a.a_desc = VDESC(vop_remove);
    883   1.23   thorpej 	a.a_dvp = dvp;
    884   1.81     pooka 	a.a_vp = vp;
    885   1.23   thorpej 	a.a_cnp = cnp;
    886  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
    887  1.105   hannken 	if (error)
    888  1.105   hannken 		return error;
    889   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_remove), &a));
    890  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
    891   1.72        ad 	return error;
    892   1.23   thorpej }
    893    1.1       cgd 
    894   1.31  jdolecek const int vop_link_vp_offsets[] = {
    895   1.94  riastrad 	VOPARG_OFFSETOF(struct vop_link_v2_args,a_dvp),
    896   1.94  riastrad 	VOPARG_OFFSETOF(struct vop_link_v2_args,a_vp),
    897    1.1       cgd 	VDESC_NO_OFFSET
    898    1.1       cgd };
    899   1.33  jdolecek const struct vnodeop_desc vop_link_desc = {
    900   1.67     pooka 	VOP_LINK_DESCOFFSET,
    901    1.1       cgd 	"vop_link",
    902   1.94  riastrad 	0,
    903    1.1       cgd 	vop_link_vp_offsets,
    904    1.1       cgd 	VDESC_NO_OFFSET,
    905    1.1       cgd 	VDESC_NO_OFFSET,
    906   1.94  riastrad 	VOPARG_OFFSETOF(struct vop_link_v2_args, a_cnp),
    907    1.1       cgd };
    908   1.23   thorpej int
    909   1.60   thorpej VOP_LINK(struct vnode *dvp,
    910   1.60   thorpej     struct vnode *vp,
    911   1.60   thorpej     struct componentname *cnp)
    912   1.23   thorpej {
    913   1.72        ad 	int error;
    914   1.72        ad 	bool mpsafe;
    915   1.94  riastrad 	struct vop_link_v2_args a;
    916  1.105   hannken 	struct mount *mp;
    917   1.23   thorpej 	a.a_desc = VDESC(vop_link);
    918   1.23   thorpej 	a.a_dvp = dvp;
    919   1.81     pooka 	a.a_vp = vp;
    920   1.23   thorpej 	a.a_cnp = cnp;
    921  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
    922  1.105   hannken 	if (error)
    923  1.105   hannken 		return error;
    924   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_link), &a));
    925  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
    926   1.72        ad 	return error;
    927   1.23   thorpej }
    928    1.1       cgd 
    929   1.31  jdolecek const int vop_rename_vp_offsets[] = {
    930    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args,a_fdvp),
    931    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args,a_fvp),
    932    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args,a_tdvp),
    933    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args,a_tvp),
    934    1.1       cgd 	VDESC_NO_OFFSET
    935    1.1       cgd };
    936   1.33  jdolecek const struct vnodeop_desc vop_rename_desc = {
    937   1.67     pooka 	VOP_RENAME_DESCOFFSET,
    938    1.1       cgd 	"vop_rename",
    939   1.42  jdolecek 	0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLPUT | VDESC_VP3_WILLPUT,
    940    1.1       cgd 	vop_rename_vp_offsets,
    941    1.1       cgd 	VDESC_NO_OFFSET,
    942    1.1       cgd 	VDESC_NO_OFFSET,
    943    1.1       cgd 	VOPARG_OFFSETOF(struct vop_rename_args, a_fcnp),
    944    1.1       cgd };
    945   1.23   thorpej int
    946   1.60   thorpej VOP_RENAME(struct vnode *fdvp,
    947   1.60   thorpej     struct vnode *fvp,
    948   1.60   thorpej     struct componentname *fcnp,
    949   1.60   thorpej     struct vnode *tdvp,
    950   1.60   thorpej     struct vnode *tvp,
    951   1.60   thorpej     struct componentname *tcnp)
    952   1.23   thorpej {
    953   1.72        ad 	int error;
    954   1.72        ad 	bool mpsafe;
    955   1.23   thorpej 	struct vop_rename_args a;
    956  1.105   hannken 	struct mount *mp;
    957   1.23   thorpej 	a.a_desc = VDESC(vop_rename);
    958   1.23   thorpej 	a.a_fdvp = fdvp;
    959   1.23   thorpej 	a.a_fvp = fvp;
    960   1.23   thorpej 	a.a_fcnp = fcnp;
    961   1.23   thorpej 	a.a_tdvp = tdvp;
    962   1.23   thorpej 	a.a_tvp = tvp;
    963   1.23   thorpej 	a.a_tcnp = tcnp;
    964  1.105   hannken 	error = vop_pre(fdvp, &mp, &mpsafe, FST_YES);
    965  1.105   hannken 	if (error)
    966  1.105   hannken 		return error;
    967   1.72        ad 	error = (VCALL(fdvp, VOFFSET(vop_rename), &a));
    968  1.105   hannken 	vop_post(fdvp, mp, mpsafe, FST_YES);
    969   1.72        ad 	return error;
    970   1.23   thorpej }
    971    1.1       cgd 
    972   1.31  jdolecek const int vop_mkdir_vp_offsets[] = {
    973   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mkdir_v3_args,a_dvp),
    974    1.1       cgd 	VDESC_NO_OFFSET
    975    1.1       cgd };
    976   1.33  jdolecek const struct vnodeop_desc vop_mkdir_desc = {
    977   1.67     pooka 	VOP_MKDIR_DESCOFFSET,
    978    1.1       cgd 	"vop_mkdir",
    979   1.90   hannken 	0,
    980    1.1       cgd 	vop_mkdir_vp_offsets,
    981   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mkdir_v3_args, a_vpp),
    982    1.1       cgd 	VDESC_NO_OFFSET,
    983   1.91   hannken 	VOPARG_OFFSETOF(struct vop_mkdir_v3_args, a_cnp),
    984    1.1       cgd };
    985   1.23   thorpej int
    986   1.60   thorpej VOP_MKDIR(struct vnode *dvp,
    987   1.60   thorpej     struct vnode **vpp,
    988   1.60   thorpej     struct componentname *cnp,
    989   1.60   thorpej     struct vattr *vap)
    990   1.23   thorpej {
    991   1.72        ad 	int error;
    992   1.72        ad 	bool mpsafe;
    993   1.91   hannken 	struct vop_mkdir_v3_args a;
    994  1.105   hannken 	struct mount *mp;
    995   1.23   thorpej 	a.a_desc = VDESC(vop_mkdir);
    996   1.23   thorpej 	a.a_dvp = dvp;
    997   1.23   thorpej 	a.a_vpp = vpp;
    998   1.23   thorpej 	a.a_cnp = cnp;
    999   1.23   thorpej 	a.a_vap = vap;
   1000  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
   1001  1.105   hannken 	if (error)
   1002  1.105   hannken 		return error;
   1003   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_mkdir), &a));
   1004  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
   1005   1.69     pooka #ifdef DIAGNOSTIC
   1006   1.72        ad 	if (error == 0)
   1007   1.69     pooka 		KASSERT((*vpp)->v_size != VSIZENOTSET
   1008   1.69     pooka 		    && (*vpp)->v_writesize != VSIZENOTSET);
   1009   1.69     pooka #endif /* DIAGNOSTIC */
   1010   1.72        ad 	return error;
   1011   1.23   thorpej }
   1012    1.1       cgd 
   1013   1.31  jdolecek const int vop_rmdir_vp_offsets[] = {
   1014  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_rmdir_v2_args,a_dvp),
   1015  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_rmdir_v2_args,a_vp),
   1016    1.1       cgd 	VDESC_NO_OFFSET
   1017    1.1       cgd };
   1018   1.33  jdolecek const struct vnodeop_desc vop_rmdir_desc = {
   1019   1.67     pooka 	VOP_RMDIR_DESCOFFSET,
   1020    1.1       cgd 	"vop_rmdir",
   1021  1.103  riastrad 	0 | VDESC_VP1_WILLPUT,
   1022    1.1       cgd 	vop_rmdir_vp_offsets,
   1023    1.1       cgd 	VDESC_NO_OFFSET,
   1024    1.1       cgd 	VDESC_NO_OFFSET,
   1025  1.103  riastrad 	VOPARG_OFFSETOF(struct vop_rmdir_v2_args, a_cnp),
   1026    1.1       cgd };
   1027   1.23   thorpej int
   1028   1.60   thorpej VOP_RMDIR(struct vnode *dvp,
   1029   1.60   thorpej     struct vnode *vp,
   1030   1.60   thorpej     struct componentname *cnp)
   1031   1.23   thorpej {
   1032   1.72        ad 	int error;
   1033   1.72        ad 	bool mpsafe;
   1034  1.103  riastrad 	struct vop_rmdir_v2_args a;
   1035  1.105   hannken 	struct mount *mp;
   1036   1.23   thorpej 	a.a_desc = VDESC(vop_rmdir);
   1037   1.23   thorpej 	a.a_dvp = dvp;
   1038   1.81     pooka 	a.a_vp = vp;
   1039   1.23   thorpej 	a.a_cnp = cnp;
   1040  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
   1041  1.105   hannken 	if (error)
   1042  1.105   hannken 		return error;
   1043   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_rmdir), &a));
   1044  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
   1045   1.72        ad 	return error;
   1046   1.23   thorpej }
   1047    1.1       cgd 
   1048   1.31  jdolecek const int vop_symlink_vp_offsets[] = {
   1049   1.91   hannken 	VOPARG_OFFSETOF(struct vop_symlink_v3_args,a_dvp),
   1050    1.1       cgd 	VDESC_NO_OFFSET
   1051    1.1       cgd };
   1052   1.33  jdolecek const struct vnodeop_desc vop_symlink_desc = {
   1053   1.67     pooka 	VOP_SYMLINK_DESCOFFSET,
   1054    1.1       cgd 	"vop_symlink",
   1055   1.90   hannken 	0,
   1056    1.1       cgd 	vop_symlink_vp_offsets,
   1057   1.91   hannken 	VOPARG_OFFSETOF(struct vop_symlink_v3_args, a_vpp),
   1058    1.1       cgd 	VDESC_NO_OFFSET,
   1059   1.91   hannken 	VOPARG_OFFSETOF(struct vop_symlink_v3_args, a_cnp),
   1060    1.1       cgd };
   1061   1.23   thorpej int
   1062   1.60   thorpej VOP_SYMLINK(struct vnode *dvp,
   1063   1.60   thorpej     struct vnode **vpp,
   1064   1.60   thorpej     struct componentname *cnp,
   1065   1.60   thorpej     struct vattr *vap,
   1066   1.60   thorpej     char *target)
   1067   1.23   thorpej {
   1068   1.72        ad 	int error;
   1069   1.72        ad 	bool mpsafe;
   1070   1.91   hannken 	struct vop_symlink_v3_args a;
   1071  1.105   hannken 	struct mount *mp;
   1072   1.23   thorpej 	a.a_desc = VDESC(vop_symlink);
   1073   1.23   thorpej 	a.a_dvp = dvp;
   1074   1.23   thorpej 	a.a_vpp = vpp;
   1075   1.23   thorpej 	a.a_cnp = cnp;
   1076   1.23   thorpej 	a.a_vap = vap;
   1077   1.23   thorpej 	a.a_target = target;
   1078  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
   1079  1.105   hannken 	if (error)
   1080  1.105   hannken 		return error;
   1081   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_symlink), &a));
   1082  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_NO);
   1083   1.69     pooka #ifdef DIAGNOSTIC
   1084   1.72        ad 	if (error == 0)
   1085   1.69     pooka 		KASSERT((*vpp)->v_size != VSIZENOTSET
   1086   1.69     pooka 		    && (*vpp)->v_writesize != VSIZENOTSET);
   1087   1.69     pooka #endif /* DIAGNOSTIC */
   1088   1.72        ad 	return error;
   1089   1.23   thorpej }
   1090    1.1       cgd 
   1091   1.31  jdolecek const int vop_readdir_vp_offsets[] = {
   1092    1.1       cgd 	VOPARG_OFFSETOF(struct vop_readdir_args,a_vp),
   1093    1.1       cgd 	VDESC_NO_OFFSET
   1094    1.1       cgd };
   1095   1.33  jdolecek const struct vnodeop_desc vop_readdir_desc = {
   1096   1.67     pooka 	VOP_READDIR_DESCOFFSET,
   1097    1.1       cgd 	"vop_readdir",
   1098    1.1       cgd 	0,
   1099    1.1       cgd 	vop_readdir_vp_offsets,
   1100    1.1       cgd 	VDESC_NO_OFFSET,
   1101    1.1       cgd 	VOPARG_OFFSETOF(struct vop_readdir_args, a_cred),
   1102    1.1       cgd 	VDESC_NO_OFFSET,
   1103    1.1       cgd };
   1104   1.23   thorpej int
   1105   1.60   thorpej VOP_READDIR(struct vnode *vp,
   1106   1.60   thorpej     struct uio *uio,
   1107   1.65      elad     kauth_cred_t cred,
   1108   1.60   thorpej     int *eofflag,
   1109   1.60   thorpej     off_t **cookies,
   1110   1.60   thorpej     int *ncookies)
   1111   1.23   thorpej {
   1112   1.72        ad 	int error;
   1113   1.72        ad 	bool mpsafe;
   1114   1.23   thorpej 	struct vop_readdir_args a;
   1115  1.105   hannken 	struct mount *mp;
   1116   1.23   thorpej 	a.a_desc = VDESC(vop_readdir);
   1117   1.23   thorpej 	a.a_vp = vp;
   1118   1.23   thorpej 	a.a_uio = uio;
   1119   1.23   thorpej 	a.a_cred = cred;
   1120   1.23   thorpej 	a.a_eofflag = eofflag;
   1121   1.23   thorpej 	a.a_cookies = cookies;
   1122   1.23   thorpej 	a.a_ncookies = ncookies;
   1123  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1124  1.105   hannken 	if (error)
   1125  1.105   hannken 		return error;
   1126   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_readdir), &a));
   1127  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1128   1.72        ad 	return error;
   1129   1.23   thorpej }
   1130    1.1       cgd 
   1131   1.31  jdolecek const int vop_readlink_vp_offsets[] = {
   1132    1.1       cgd 	VOPARG_OFFSETOF(struct vop_readlink_args,a_vp),
   1133    1.1       cgd 	VDESC_NO_OFFSET
   1134    1.1       cgd };
   1135   1.33  jdolecek const struct vnodeop_desc vop_readlink_desc = {
   1136   1.67     pooka 	VOP_READLINK_DESCOFFSET,
   1137    1.1       cgd 	"vop_readlink",
   1138    1.1       cgd 	0,
   1139    1.1       cgd 	vop_readlink_vp_offsets,
   1140    1.1       cgd 	VDESC_NO_OFFSET,
   1141    1.1       cgd 	VOPARG_OFFSETOF(struct vop_readlink_args, a_cred),
   1142    1.1       cgd 	VDESC_NO_OFFSET,
   1143    1.1       cgd };
   1144   1.23   thorpej int
   1145   1.60   thorpej VOP_READLINK(struct vnode *vp,
   1146   1.60   thorpej     struct uio *uio,
   1147   1.65      elad     kauth_cred_t cred)
   1148   1.23   thorpej {
   1149   1.72        ad 	int error;
   1150   1.72        ad 	bool mpsafe;
   1151   1.23   thorpej 	struct vop_readlink_args a;
   1152  1.105   hannken 	struct mount *mp;
   1153   1.23   thorpej 	a.a_desc = VDESC(vop_readlink);
   1154   1.23   thorpej 	a.a_vp = vp;
   1155   1.23   thorpej 	a.a_uio = uio;
   1156   1.23   thorpej 	a.a_cred = cred;
   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_readlink), &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_abortop_vp_offsets[] = {
   1166    1.1       cgd 	VOPARG_OFFSETOF(struct vop_abortop_args,a_dvp),
   1167    1.1       cgd 	VDESC_NO_OFFSET
   1168    1.1       cgd };
   1169   1.33  jdolecek const struct vnodeop_desc vop_abortop_desc = {
   1170   1.67     pooka 	VOP_ABORTOP_DESCOFFSET,
   1171    1.1       cgd 	"vop_abortop",
   1172    1.1       cgd 	0,
   1173    1.1       cgd 	vop_abortop_vp_offsets,
   1174    1.1       cgd 	VDESC_NO_OFFSET,
   1175    1.1       cgd 	VDESC_NO_OFFSET,
   1176    1.1       cgd 	VOPARG_OFFSETOF(struct vop_abortop_args, a_cnp),
   1177    1.1       cgd };
   1178   1.23   thorpej int
   1179   1.60   thorpej VOP_ABORTOP(struct vnode *dvp,
   1180   1.60   thorpej     struct componentname *cnp)
   1181   1.23   thorpej {
   1182   1.72        ad 	int error;
   1183   1.72        ad 	bool mpsafe;
   1184   1.23   thorpej 	struct vop_abortop_args a;
   1185  1.105   hannken 	struct mount *mp;
   1186   1.23   thorpej 	a.a_desc = VDESC(vop_abortop);
   1187   1.23   thorpej 	a.a_dvp = dvp;
   1188   1.23   thorpej 	a.a_cnp = cnp;
   1189  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_YES);
   1190  1.105   hannken 	if (error)
   1191  1.105   hannken 		return error;
   1192   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_abortop), &a));
   1193  1.105   hannken 	vop_post(dvp, mp, mpsafe, FST_YES);
   1194   1.72        ad 	return error;
   1195   1.23   thorpej }
   1196    1.1       cgd 
   1197   1.31  jdolecek const int vop_inactive_vp_offsets[] = {
   1198   1.98  riastrad 	VOPARG_OFFSETOF(struct vop_inactive_v2_args,a_vp),
   1199    1.1       cgd 	VDESC_NO_OFFSET
   1200    1.1       cgd };
   1201   1.33  jdolecek const struct vnodeop_desc vop_inactive_desc = {
   1202   1.67     pooka 	VOP_INACTIVE_DESCOFFSET,
   1203    1.1       cgd 	"vop_inactive",
   1204   1.98  riastrad 	0,
   1205    1.1       cgd 	vop_inactive_vp_offsets,
   1206    1.1       cgd 	VDESC_NO_OFFSET,
   1207    1.1       cgd 	VDESC_NO_OFFSET,
   1208    1.1       cgd 	VDESC_NO_OFFSET,
   1209    1.1       cgd };
   1210   1.23   thorpej int
   1211   1.75        ad VOP_INACTIVE(struct vnode *vp,
   1212   1.75        ad     bool *recycle)
   1213   1.23   thorpej {
   1214   1.72        ad 	int error;
   1215   1.72        ad 	bool mpsafe;
   1216   1.98  riastrad 	struct vop_inactive_v2_args a;
   1217  1.105   hannken 	struct mount *mp;
   1218   1.23   thorpej 	a.a_desc = VDESC(vop_inactive);
   1219   1.23   thorpej 	a.a_vp = vp;
   1220   1.75        ad 	a.a_recycle = recycle;
   1221  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1222  1.105   hannken 	if (error)
   1223  1.105   hannken 		return error;
   1224   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_inactive), &a));
   1225  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1226   1.72        ad 	return error;
   1227   1.23   thorpej }
   1228    1.1       cgd 
   1229   1.31  jdolecek const int vop_reclaim_vp_offsets[] = {
   1230  1.104  riastrad 	VOPARG_OFFSETOF(struct vop_reclaim_v2_args,a_vp),
   1231    1.1       cgd 	VDESC_NO_OFFSET
   1232    1.1       cgd };
   1233   1.33  jdolecek const struct vnodeop_desc vop_reclaim_desc = {
   1234   1.67     pooka 	VOP_RECLAIM_DESCOFFSET,
   1235    1.1       cgd 	"vop_reclaim",
   1236    1.1       cgd 	0,
   1237    1.1       cgd 	vop_reclaim_vp_offsets,
   1238    1.1       cgd 	VDESC_NO_OFFSET,
   1239    1.1       cgd 	VDESC_NO_OFFSET,
   1240    1.1       cgd 	VDESC_NO_OFFSET,
   1241    1.1       cgd };
   1242   1.23   thorpej int
   1243   1.73     pooka VOP_RECLAIM(struct vnode *vp)
   1244   1.23   thorpej {
   1245   1.72        ad 	int error;
   1246   1.72        ad 	bool mpsafe;
   1247  1.104  riastrad 	struct vop_reclaim_v2_args a;
   1248  1.105   hannken 	struct mount *mp;
   1249   1.23   thorpej 	a.a_desc = VDESC(vop_reclaim);
   1250   1.23   thorpej 	a.a_vp = vp;
   1251  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1252  1.105   hannken 	if (error)
   1253  1.105   hannken 		return error;
   1254   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_reclaim), &a));
   1255  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1256   1.72        ad 	return error;
   1257   1.23   thorpej }
   1258    1.1       cgd 
   1259   1.31  jdolecek const int vop_lock_vp_offsets[] = {
   1260    1.1       cgd 	VOPARG_OFFSETOF(struct vop_lock_args,a_vp),
   1261    1.1       cgd 	VDESC_NO_OFFSET
   1262    1.1       cgd };
   1263   1.33  jdolecek const struct vnodeop_desc vop_lock_desc = {
   1264   1.67     pooka 	VOP_LOCK_DESCOFFSET,
   1265    1.1       cgd 	"vop_lock",
   1266    1.1       cgd 	0,
   1267    1.1       cgd 	vop_lock_vp_offsets,
   1268    1.1       cgd 	VDESC_NO_OFFSET,
   1269    1.1       cgd 	VDESC_NO_OFFSET,
   1270    1.1       cgd 	VDESC_NO_OFFSET,
   1271    1.1       cgd };
   1272   1.23   thorpej int
   1273   1.60   thorpej VOP_LOCK(struct vnode *vp,
   1274   1.60   thorpej     int flags)
   1275   1.23   thorpej {
   1276   1.72        ad 	int error;
   1277   1.72        ad 	bool mpsafe;
   1278   1.23   thorpej 	struct vop_lock_args a;
   1279  1.105   hannken 	struct mount *mp;
   1280   1.23   thorpej 	a.a_desc = VDESC(vop_lock);
   1281   1.23   thorpej 	a.a_vp = vp;
   1282   1.23   thorpej 	a.a_flags = flags;
   1283  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, (flags & LK_NOWAIT ? FST_TRY : FST_YES));
   1284  1.105   hannken 	if (error)
   1285  1.105   hannken 		return error;
   1286   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_lock), &a));
   1287  1.105   hannken 	vop_post(vp, mp, mpsafe, (error ? FST_YES : FST_NO));
   1288   1.72        ad 	return error;
   1289   1.23   thorpej }
   1290    1.1       cgd 
   1291   1.31  jdolecek const int vop_unlock_vp_offsets[] = {
   1292    1.1       cgd 	VOPARG_OFFSETOF(struct vop_unlock_args,a_vp),
   1293    1.1       cgd 	VDESC_NO_OFFSET
   1294    1.1       cgd };
   1295   1.33  jdolecek const struct vnodeop_desc vop_unlock_desc = {
   1296   1.67     pooka 	VOP_UNLOCK_DESCOFFSET,
   1297    1.1       cgd 	"vop_unlock",
   1298    1.1       cgd 	0,
   1299    1.1       cgd 	vop_unlock_vp_offsets,
   1300    1.1       cgd 	VDESC_NO_OFFSET,
   1301    1.1       cgd 	VDESC_NO_OFFSET,
   1302    1.1       cgd 	VDESC_NO_OFFSET,
   1303    1.1       cgd };
   1304   1.23   thorpej int
   1305   1.85   hannken VOP_UNLOCK(struct vnode *vp)
   1306   1.23   thorpej {
   1307   1.72        ad 	int error;
   1308   1.72        ad 	bool mpsafe;
   1309   1.23   thorpej 	struct vop_unlock_args a;
   1310  1.105   hannken 	struct mount *mp;
   1311   1.23   thorpej 	a.a_desc = VDESC(vop_unlock);
   1312   1.23   thorpej 	a.a_vp = vp;
   1313  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1314  1.105   hannken 	if (error)
   1315  1.105   hannken 		return error;
   1316   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_unlock), &a));
   1317  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
   1318   1.72        ad 	return error;
   1319   1.23   thorpej }
   1320    1.1       cgd 
   1321   1.31  jdolecek const int vop_bmap_vp_offsets[] = {
   1322    1.1       cgd 	VOPARG_OFFSETOF(struct vop_bmap_args,a_vp),
   1323    1.1       cgd 	VDESC_NO_OFFSET
   1324    1.1       cgd };
   1325   1.33  jdolecek const struct vnodeop_desc vop_bmap_desc = {
   1326   1.67     pooka 	VOP_BMAP_DESCOFFSET,
   1327    1.1       cgd 	"vop_bmap",
   1328    1.1       cgd 	0,
   1329    1.1       cgd 	vop_bmap_vp_offsets,
   1330    1.1       cgd 	VOPARG_OFFSETOF(struct vop_bmap_args, a_vpp),
   1331    1.1       cgd 	VDESC_NO_OFFSET,
   1332    1.1       cgd 	VDESC_NO_OFFSET,
   1333    1.1       cgd };
   1334   1.23   thorpej int
   1335   1.60   thorpej VOP_BMAP(struct vnode *vp,
   1336   1.60   thorpej     daddr_t bn,
   1337   1.60   thorpej     struct vnode **vpp,
   1338   1.60   thorpej     daddr_t *bnp,
   1339   1.60   thorpej     int *runp)
   1340   1.23   thorpej {
   1341   1.72        ad 	int error;
   1342   1.72        ad 	bool mpsafe;
   1343   1.23   thorpej 	struct vop_bmap_args a;
   1344  1.105   hannken 	struct mount *mp;
   1345   1.23   thorpej 	a.a_desc = VDESC(vop_bmap);
   1346   1.23   thorpej 	a.a_vp = vp;
   1347   1.23   thorpej 	a.a_bn = bn;
   1348   1.23   thorpej 	a.a_vpp = vpp;
   1349   1.23   thorpej 	a.a_bnp = bnp;
   1350   1.23   thorpej 	a.a_runp = runp;
   1351  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
   1352  1.105   hannken 	if (error)
   1353  1.105   hannken 		return error;
   1354   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_bmap), &a));
   1355  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
   1356   1.72        ad 	return error;
   1357   1.23   thorpej }
   1358    1.1       cgd 
   1359   1.46   hannken const int vop_strategy_vp_offsets[] = {
   1360   1.46   hannken 	VOPARG_OFFSETOF(struct vop_strategy_args,a_vp),
   1361   1.46   hannken 	VDESC_NO_OFFSET
   1362   1.46   hannken };
   1363   1.46   hannken const struct vnodeop_desc vop_strategy_desc = {
   1364   1.67     pooka 	VOP_STRATEGY_DESCOFFSET,
   1365   1.46   hannken 	"vop_strategy",
   1366   1.46   hannken 	0,
   1367   1.46   hannken 	vop_strategy_vp_offsets,
   1368   1.46   hannken 	VDESC_NO_OFFSET,
   1369   1.46   hannken 	VDESC_NO_OFFSET,
   1370   1.46   hannken 	VDESC_NO_OFFSET,
   1371   1.46   hannken };
   1372   1.46   hannken int
   1373   1.60   thorpej VOP_STRATEGY(struct vnode *vp,
   1374   1.60   thorpej     struct buf *bp)
   1375   1.46   hannken {
   1376   1.72        ad 	int error;
   1377   1.72        ad 	bool mpsafe;
   1378   1.46   hannken 	struct vop_strategy_args a;
   1379  1.105   hannken 	struct mount *mp;
   1380   1.46   hannken 	a.a_desc = VDESC(vop_strategy);
   1381   1.46   hannken 	a.a_vp = vp;
   1382   1.46   hannken 	a.a_bp = bp;
   1383  1.108   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_LAZY);
   1384  1.105   hannken 	if (error)
   1385  1.105   hannken 		return error;
   1386   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_strategy), &a));
   1387  1.108   hannken 	vop_post(vp, mp, mpsafe, FST_LAZY);
   1388   1.72        ad 	return error;
   1389   1.46   hannken }
   1390   1.46   hannken 
   1391   1.31  jdolecek const int vop_print_vp_offsets[] = {
   1392    1.1       cgd 	VOPARG_OFFSETOF(struct vop_print_args,a_vp),
   1393    1.1       cgd 	VDESC_NO_OFFSET
   1394    1.1       cgd };
   1395   1.33  jdolecek const struct vnodeop_desc vop_print_desc = {
   1396   1.67     pooka 	VOP_PRINT_DESCOFFSET,
   1397    1.1       cgd 	"vop_print",
   1398    1.1       cgd 	0,
   1399    1.1       cgd 	vop_print_vp_offsets,
   1400    1.1       cgd 	VDESC_NO_OFFSET,
   1401    1.1       cgd 	VDESC_NO_OFFSET,
   1402    1.1       cgd 	VDESC_NO_OFFSET,
   1403    1.1       cgd };
   1404   1.23   thorpej int
   1405   1.60   thorpej VOP_PRINT(struct vnode *vp)
   1406   1.23   thorpej {
   1407   1.72        ad 	int error;
   1408   1.72        ad 	bool mpsafe;
   1409   1.23   thorpej 	struct vop_print_args a;
   1410  1.105   hannken 	struct mount *mp;
   1411   1.23   thorpej 	a.a_desc = VDESC(vop_print);
   1412   1.23   thorpej 	a.a_vp = vp;
   1413  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_YES);
   1414  1.105   hannken 	if (error)
   1415  1.105   hannken 		return error;
   1416   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_print), &a));
   1417  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_YES);
   1418   1.72        ad 	return error;
   1419   1.23   thorpej }
   1420    1.1       cgd 
   1421   1.31  jdolecek const int vop_islocked_vp_offsets[] = {
   1422    1.1       cgd 	VOPARG_OFFSETOF(struct vop_islocked_args,a_vp),
   1423    1.1       cgd 	VDESC_NO_OFFSET
   1424    1.1       cgd };
   1425   1.33  jdolecek const struct vnodeop_desc vop_islocked_desc = {
   1426   1.67     pooka 	VOP_ISLOCKED_DESCOFFSET,
   1427    1.1       cgd 	"vop_islocked",
   1428    1.1       cgd 	0,
   1429    1.1       cgd 	vop_islocked_vp_offsets,
   1430    1.1       cgd 	VDESC_NO_OFFSET,
   1431    1.1       cgd 	VDESC_NO_OFFSET,
   1432    1.1       cgd 	VDESC_NO_OFFSET,
   1433    1.1       cgd };
   1434   1.23   thorpej int
   1435   1.60   thorpej VOP_ISLOCKED(struct vnode *vp)
   1436   1.23   thorpej {
   1437   1.72        ad 	int error;
   1438   1.72        ad 	bool mpsafe;
   1439   1.23   thorpej 	struct vop_islocked_args a;
   1440  1.105   hannken 	struct mount *mp;
   1441   1.23   thorpej 	a.a_desc = VDESC(vop_islocked);
   1442   1.23   thorpej 	a.a_vp = vp;
   1443  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1444  1.105   hannken 	if (error)
   1445  1.105   hannken 		return error;
   1446   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_islocked), &a));
   1447  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1448   1.72        ad 	return error;
   1449   1.23   thorpej }
   1450    1.1       cgd 
   1451   1.31  jdolecek const int vop_pathconf_vp_offsets[] = {
   1452    1.1       cgd 	VOPARG_OFFSETOF(struct vop_pathconf_args,a_vp),
   1453    1.1       cgd 	VDESC_NO_OFFSET
   1454    1.1       cgd };
   1455   1.33  jdolecek const struct vnodeop_desc vop_pathconf_desc = {
   1456   1.67     pooka 	VOP_PATHCONF_DESCOFFSET,
   1457    1.1       cgd 	"vop_pathconf",
   1458    1.1       cgd 	0,
   1459    1.1       cgd 	vop_pathconf_vp_offsets,
   1460    1.1       cgd 	VDESC_NO_OFFSET,
   1461    1.1       cgd 	VDESC_NO_OFFSET,
   1462    1.1       cgd 	VDESC_NO_OFFSET,
   1463    1.1       cgd };
   1464   1.23   thorpej int
   1465   1.60   thorpej VOP_PATHCONF(struct vnode *vp,
   1466   1.60   thorpej     int name,
   1467   1.60   thorpej     register_t *retval)
   1468   1.23   thorpej {
   1469   1.72        ad 	int error;
   1470   1.72        ad 	bool mpsafe;
   1471   1.23   thorpej 	struct vop_pathconf_args a;
   1472  1.105   hannken 	struct mount *mp;
   1473   1.23   thorpej 	a.a_desc = VDESC(vop_pathconf);
   1474   1.23   thorpej 	a.a_vp = vp;
   1475   1.23   thorpej 	a.a_name = name;
   1476   1.23   thorpej 	a.a_retval = retval;
   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_pathconf), &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_advlock_vp_offsets[] = {
   1486    1.1       cgd 	VOPARG_OFFSETOF(struct vop_advlock_args,a_vp),
   1487    1.1       cgd 	VDESC_NO_OFFSET
   1488    1.1       cgd };
   1489   1.33  jdolecek const struct vnodeop_desc vop_advlock_desc = {
   1490   1.67     pooka 	VOP_ADVLOCK_DESCOFFSET,
   1491    1.1       cgd 	"vop_advlock",
   1492    1.1       cgd 	0,
   1493    1.1       cgd 	vop_advlock_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_ADVLOCK(struct vnode *vp,
   1500   1.60   thorpej     void *id,
   1501   1.60   thorpej     int op,
   1502   1.60   thorpej     struct flock *fl,
   1503   1.60   thorpej     int flags)
   1504   1.23   thorpej {
   1505   1.72        ad 	int error;
   1506   1.72        ad 	bool mpsafe;
   1507   1.23   thorpej 	struct vop_advlock_args a;
   1508  1.105   hannken 	struct mount *mp;
   1509   1.23   thorpej 	a.a_desc = VDESC(vop_advlock);
   1510   1.23   thorpej 	a.a_vp = vp;
   1511   1.23   thorpej 	a.a_id = id;
   1512   1.23   thorpej 	a.a_op = op;
   1513   1.23   thorpej 	a.a_fl = fl;
   1514   1.23   thorpej 	a.a_flags = flags;
   1515  1.107   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1516  1.105   hannken 	if (error)
   1517  1.105   hannken 		return error;
   1518   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_advlock), &a));
   1519  1.107   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1520   1.72        ad 	return error;
   1521   1.23   thorpej }
   1522    1.1       cgd 
   1523   1.31  jdolecek const int vop_whiteout_vp_offsets[] = {
   1524    1.1       cgd 	VOPARG_OFFSETOF(struct vop_whiteout_args,a_dvp),
   1525    1.1       cgd 	VDESC_NO_OFFSET
   1526    1.1       cgd };
   1527   1.33  jdolecek const struct vnodeop_desc vop_whiteout_desc = {
   1528   1.67     pooka 	VOP_WHITEOUT_DESCOFFSET,
   1529    1.1       cgd 	"vop_whiteout",
   1530    1.1       cgd 	0,
   1531    1.1       cgd 	vop_whiteout_vp_offsets,
   1532    1.1       cgd 	VDESC_NO_OFFSET,
   1533    1.1       cgd 	VDESC_NO_OFFSET,
   1534    1.1       cgd 	VOPARG_OFFSETOF(struct vop_whiteout_args, a_cnp),
   1535    1.1       cgd };
   1536   1.23   thorpej int
   1537   1.60   thorpej VOP_WHITEOUT(struct vnode *dvp,
   1538   1.60   thorpej     struct componentname *cnp,
   1539   1.60   thorpej     int flags)
   1540   1.23   thorpej {
   1541   1.72        ad 	int error;
   1542   1.72        ad 	bool mpsafe;
   1543   1.23   thorpej 	struct vop_whiteout_args a;
   1544  1.105   hannken 	struct mount *mp;
   1545   1.23   thorpej 	a.a_desc = VDESC(vop_whiteout);
   1546   1.23   thorpej 	a.a_dvp = dvp;
   1547   1.23   thorpej 	a.a_cnp = cnp;
   1548   1.23   thorpej 	a.a_flags = flags;
   1549  1.105   hannken 	error = vop_pre(dvp, &mp, &mpsafe, FST_NO);
   1550  1.105   hannken 	if (error)
   1551  1.105   hannken 		return error;
   1552   1.72        ad 	error = (VCALL(dvp, VOFFSET(vop_whiteout), &a));
   1553  1.105   hannken 	vop_post(dvp, 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_getpages_vp_offsets[] = {
   1558   1.26       chs 	VOPARG_OFFSETOF(struct vop_getpages_args,a_vp),
   1559   1.26       chs 	VDESC_NO_OFFSET
   1560   1.26       chs };
   1561   1.33  jdolecek const struct vnodeop_desc vop_getpages_desc = {
   1562   1.67     pooka 	VOP_GETPAGES_DESCOFFSET,
   1563   1.26       chs 	"vop_getpages",
   1564   1.26       chs 	0,
   1565   1.26       chs 	vop_getpages_vp_offsets,
   1566   1.26       chs 	VDESC_NO_OFFSET,
   1567   1.26       chs 	VDESC_NO_OFFSET,
   1568   1.26       chs 	VDESC_NO_OFFSET,
   1569   1.26       chs };
   1570   1.26       chs int
   1571   1.60   thorpej VOP_GETPAGES(struct vnode *vp,
   1572   1.60   thorpej     voff_t offset,
   1573   1.60   thorpej     struct vm_page **m,
   1574   1.60   thorpej     int *count,
   1575   1.60   thorpej     int centeridx,
   1576   1.60   thorpej     vm_prot_t access_type,
   1577   1.60   thorpej     int advice,
   1578   1.60   thorpej     int flags)
   1579   1.26       chs {
   1580   1.72        ad 	int error;
   1581   1.72        ad 	bool mpsafe;
   1582   1.26       chs 	struct vop_getpages_args a;
   1583  1.105   hannken 	struct mount *mp;
   1584   1.26       chs 	a.a_desc = VDESC(vop_getpages);
   1585   1.26       chs 	a.a_vp = vp;
   1586   1.26       chs 	a.a_offset = offset;
   1587   1.26       chs 	a.a_m = m;
   1588   1.26       chs 	a.a_count = count;
   1589   1.26       chs 	a.a_centeridx = centeridx;
   1590   1.26       chs 	a.a_access_type = access_type;
   1591   1.26       chs 	a.a_advice = advice;
   1592   1.26       chs 	a.a_flags = flags;
   1593  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1594  1.105   hannken 	if (error)
   1595  1.105   hannken 		return error;
   1596   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_getpages), &a));
   1597  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1598   1.72        ad 	return error;
   1599   1.26       chs }
   1600   1.26       chs 
   1601   1.31  jdolecek const int vop_putpages_vp_offsets[] = {
   1602   1.26       chs 	VOPARG_OFFSETOF(struct vop_putpages_args,a_vp),
   1603   1.26       chs 	VDESC_NO_OFFSET
   1604   1.26       chs };
   1605   1.33  jdolecek const struct vnodeop_desc vop_putpages_desc = {
   1606   1.67     pooka 	VOP_PUTPAGES_DESCOFFSET,
   1607   1.26       chs 	"vop_putpages",
   1608   1.26       chs 	0,
   1609   1.26       chs 	vop_putpages_vp_offsets,
   1610   1.26       chs 	VDESC_NO_OFFSET,
   1611   1.26       chs 	VDESC_NO_OFFSET,
   1612   1.26       chs 	VDESC_NO_OFFSET,
   1613   1.26       chs };
   1614   1.26       chs int
   1615   1.60   thorpej VOP_PUTPAGES(struct vnode *vp,
   1616   1.60   thorpej     voff_t offlo,
   1617   1.60   thorpej     voff_t offhi,
   1618   1.60   thorpej     int flags)
   1619   1.26       chs {
   1620   1.72        ad 	int error;
   1621   1.72        ad 	bool mpsafe;
   1622   1.26       chs 	struct vop_putpages_args a;
   1623  1.105   hannken 	struct mount *mp;
   1624   1.26       chs 	a.a_desc = VDESC(vop_putpages);
   1625   1.26       chs 	a.a_vp = vp;
   1626   1.38       chs 	a.a_offlo = offlo;
   1627   1.38       chs 	a.a_offhi = offhi;
   1628   1.26       chs 	a.a_flags = flags;
   1629  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1630  1.105   hannken 	if (error)
   1631  1.105   hannken 		return error;
   1632   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_putpages), &a));
   1633  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1634   1.72        ad 	return error;
   1635   1.26       chs }
   1636   1.26       chs 
   1637   1.51   thorpej const int vop_closeextattr_vp_offsets[] = {
   1638   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_closeextattr_args,a_vp),
   1639   1.51   thorpej 	VDESC_NO_OFFSET
   1640   1.51   thorpej };
   1641   1.51   thorpej const struct vnodeop_desc vop_closeextattr_desc = {
   1642   1.67     pooka 	VOP_CLOSEEXTATTR_DESCOFFSET,
   1643   1.51   thorpej 	"vop_closeextattr",
   1644   1.51   thorpej 	0,
   1645   1.51   thorpej 	vop_closeextattr_vp_offsets,
   1646   1.51   thorpej 	VDESC_NO_OFFSET,
   1647   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_closeextattr_args, a_cred),
   1648   1.51   thorpej 	VDESC_NO_OFFSET,
   1649   1.51   thorpej };
   1650   1.51   thorpej int
   1651   1.60   thorpej VOP_CLOSEEXTATTR(struct vnode *vp,
   1652   1.60   thorpej     int commit,
   1653   1.73     pooka     kauth_cred_t cred)
   1654   1.51   thorpej {
   1655   1.72        ad 	int error;
   1656   1.72        ad 	bool mpsafe;
   1657   1.51   thorpej 	struct vop_closeextattr_args a;
   1658  1.105   hannken 	struct mount *mp;
   1659   1.51   thorpej 	a.a_desc = VDESC(vop_closeextattr);
   1660   1.51   thorpej 	a.a_vp = vp;
   1661   1.51   thorpej 	a.a_commit = commit;
   1662   1.51   thorpej 	a.a_cred = cred;
   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_closeextattr), &a));
   1667  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1668   1.72        ad 	return error;
   1669   1.51   thorpej }
   1670   1.51   thorpej 
   1671   1.51   thorpej const int vop_getextattr_vp_offsets[] = {
   1672   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_getextattr_args,a_vp),
   1673   1.51   thorpej 	VDESC_NO_OFFSET
   1674   1.51   thorpej };
   1675   1.51   thorpej const struct vnodeop_desc vop_getextattr_desc = {
   1676   1.67     pooka 	VOP_GETEXTATTR_DESCOFFSET,
   1677   1.51   thorpej 	"vop_getextattr",
   1678   1.51   thorpej 	0,
   1679   1.51   thorpej 	vop_getextattr_vp_offsets,
   1680   1.51   thorpej 	VDESC_NO_OFFSET,
   1681   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_getextattr_args, a_cred),
   1682   1.51   thorpej 	VDESC_NO_OFFSET,
   1683   1.51   thorpej };
   1684   1.51   thorpej int
   1685   1.60   thorpej VOP_GETEXTATTR(struct vnode *vp,
   1686   1.60   thorpej     int attrnamespace,
   1687   1.60   thorpej     const char *name,
   1688   1.60   thorpej     struct uio *uio,
   1689   1.60   thorpej     size_t *size,
   1690   1.73     pooka     kauth_cred_t cred)
   1691   1.51   thorpej {
   1692   1.72        ad 	int error;
   1693   1.72        ad 	bool mpsafe;
   1694   1.51   thorpej 	struct vop_getextattr_args a;
   1695  1.105   hannken 	struct mount *mp;
   1696   1.51   thorpej 	a.a_desc = VDESC(vop_getextattr);
   1697   1.51   thorpej 	a.a_vp = vp;
   1698   1.51   thorpej 	a.a_attrnamespace = attrnamespace;
   1699   1.51   thorpej 	a.a_name = name;
   1700   1.51   thorpej 	a.a_uio = uio;
   1701   1.51   thorpej 	a.a_size = size;
   1702   1.51   thorpej 	a.a_cred = cred;
   1703  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1704  1.105   hannken 	if (error)
   1705  1.105   hannken 		return error;
   1706   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_getextattr), &a));
   1707  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1708   1.72        ad 	return error;
   1709   1.51   thorpej }
   1710   1.51   thorpej 
   1711   1.51   thorpej const int vop_listextattr_vp_offsets[] = {
   1712   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_listextattr_args,a_vp),
   1713   1.51   thorpej 	VDESC_NO_OFFSET
   1714   1.51   thorpej };
   1715   1.51   thorpej const struct vnodeop_desc vop_listextattr_desc = {
   1716   1.67     pooka 	VOP_LISTEXTATTR_DESCOFFSET,
   1717   1.51   thorpej 	"vop_listextattr",
   1718   1.51   thorpej 	0,
   1719   1.51   thorpej 	vop_listextattr_vp_offsets,
   1720   1.51   thorpej 	VDESC_NO_OFFSET,
   1721   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_listextattr_args, a_cred),
   1722   1.51   thorpej 	VDESC_NO_OFFSET,
   1723   1.51   thorpej };
   1724   1.51   thorpej int
   1725   1.60   thorpej VOP_LISTEXTATTR(struct vnode *vp,
   1726   1.60   thorpej     int attrnamespace,
   1727   1.60   thorpej     struct uio *uio,
   1728   1.60   thorpej     size_t *size,
   1729   1.87      manu     int flag,
   1730   1.73     pooka     kauth_cred_t cred)
   1731   1.51   thorpej {
   1732   1.72        ad 	int error;
   1733   1.72        ad 	bool mpsafe;
   1734   1.51   thorpej 	struct vop_listextattr_args a;
   1735  1.105   hannken 	struct mount *mp;
   1736   1.51   thorpej 	a.a_desc = VDESC(vop_listextattr);
   1737   1.51   thorpej 	a.a_vp = vp;
   1738   1.51   thorpej 	a.a_attrnamespace = attrnamespace;
   1739   1.51   thorpej 	a.a_uio = uio;
   1740   1.51   thorpej 	a.a_size = size;
   1741   1.87      manu 	a.a_flag = flag;
   1742   1.51   thorpej 	a.a_cred = cred;
   1743  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1744  1.105   hannken 	if (error)
   1745  1.105   hannken 		return error;
   1746   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_listextattr), &a));
   1747  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1748   1.72        ad 	return error;
   1749   1.51   thorpej }
   1750   1.51   thorpej 
   1751   1.51   thorpej const int vop_openextattr_vp_offsets[] = {
   1752   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_openextattr_args,a_vp),
   1753   1.51   thorpej 	VDESC_NO_OFFSET
   1754   1.51   thorpej };
   1755   1.51   thorpej const struct vnodeop_desc vop_openextattr_desc = {
   1756   1.67     pooka 	VOP_OPENEXTATTR_DESCOFFSET,
   1757   1.51   thorpej 	"vop_openextattr",
   1758   1.51   thorpej 	0,
   1759   1.51   thorpej 	vop_openextattr_vp_offsets,
   1760   1.51   thorpej 	VDESC_NO_OFFSET,
   1761   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_openextattr_args, a_cred),
   1762   1.51   thorpej 	VDESC_NO_OFFSET,
   1763   1.51   thorpej };
   1764   1.51   thorpej int
   1765   1.60   thorpej VOP_OPENEXTATTR(struct vnode *vp,
   1766   1.73     pooka     kauth_cred_t cred)
   1767   1.51   thorpej {
   1768   1.72        ad 	int error;
   1769   1.72        ad 	bool mpsafe;
   1770   1.51   thorpej 	struct vop_openextattr_args a;
   1771  1.105   hannken 	struct mount *mp;
   1772   1.51   thorpej 	a.a_desc = VDESC(vop_openextattr);
   1773   1.51   thorpej 	a.a_vp = vp;
   1774   1.51   thorpej 	a.a_cred = cred;
   1775  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1776  1.105   hannken 	if (error)
   1777  1.105   hannken 		return error;
   1778   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_openextattr), &a));
   1779  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1780   1.72        ad 	return error;
   1781   1.51   thorpej }
   1782   1.51   thorpej 
   1783   1.51   thorpej const int vop_deleteextattr_vp_offsets[] = {
   1784   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_deleteextattr_args,a_vp),
   1785   1.51   thorpej 	VDESC_NO_OFFSET
   1786   1.51   thorpej };
   1787   1.51   thorpej const struct vnodeop_desc vop_deleteextattr_desc = {
   1788   1.67     pooka 	VOP_DELETEEXTATTR_DESCOFFSET,
   1789   1.51   thorpej 	"vop_deleteextattr",
   1790   1.51   thorpej 	0,
   1791   1.51   thorpej 	vop_deleteextattr_vp_offsets,
   1792   1.51   thorpej 	VDESC_NO_OFFSET,
   1793   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_deleteextattr_args, a_cred),
   1794   1.51   thorpej 	VDESC_NO_OFFSET,
   1795   1.51   thorpej };
   1796   1.51   thorpej int
   1797   1.60   thorpej VOP_DELETEEXTATTR(struct vnode *vp,
   1798   1.60   thorpej     int attrnamespace,
   1799   1.60   thorpej     const char *name,
   1800   1.73     pooka     kauth_cred_t cred)
   1801   1.51   thorpej {
   1802   1.72        ad 	int error;
   1803   1.72        ad 	bool mpsafe;
   1804   1.51   thorpej 	struct vop_deleteextattr_args a;
   1805  1.105   hannken 	struct mount *mp;
   1806   1.51   thorpej 	a.a_desc = VDESC(vop_deleteextattr);
   1807   1.51   thorpej 	a.a_vp = vp;
   1808   1.51   thorpej 	a.a_attrnamespace = attrnamespace;
   1809   1.51   thorpej 	a.a_name = name;
   1810   1.51   thorpej 	a.a_cred = cred;
   1811  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1812  1.105   hannken 	if (error)
   1813  1.105   hannken 		return error;
   1814   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_deleteextattr), &a));
   1815  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1816   1.72        ad 	return error;
   1817   1.51   thorpej }
   1818   1.51   thorpej 
   1819   1.51   thorpej const int vop_setextattr_vp_offsets[] = {
   1820   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_setextattr_args,a_vp),
   1821   1.51   thorpej 	VDESC_NO_OFFSET
   1822   1.51   thorpej };
   1823   1.51   thorpej const struct vnodeop_desc vop_setextattr_desc = {
   1824   1.67     pooka 	VOP_SETEXTATTR_DESCOFFSET,
   1825   1.51   thorpej 	"vop_setextattr",
   1826   1.51   thorpej 	0,
   1827   1.51   thorpej 	vop_setextattr_vp_offsets,
   1828   1.51   thorpej 	VDESC_NO_OFFSET,
   1829   1.51   thorpej 	VOPARG_OFFSETOF(struct vop_setextattr_args, a_cred),
   1830   1.51   thorpej 	VDESC_NO_OFFSET,
   1831   1.51   thorpej };
   1832   1.51   thorpej int
   1833   1.60   thorpej VOP_SETEXTATTR(struct vnode *vp,
   1834   1.60   thorpej     int attrnamespace,
   1835   1.60   thorpej     const char *name,
   1836   1.60   thorpej     struct uio *uio,
   1837   1.73     pooka     kauth_cred_t cred)
   1838   1.51   thorpej {
   1839   1.72        ad 	int error;
   1840   1.72        ad 	bool mpsafe;
   1841   1.51   thorpej 	struct vop_setextattr_args a;
   1842  1.105   hannken 	struct mount *mp;
   1843   1.51   thorpej 	a.a_desc = VDESC(vop_setextattr);
   1844   1.51   thorpej 	a.a_vp = vp;
   1845   1.51   thorpej 	a.a_attrnamespace = attrnamespace;
   1846   1.51   thorpej 	a.a_name = name;
   1847   1.51   thorpej 	a.a_uio = uio;
   1848   1.51   thorpej 	a.a_cred = cred;
   1849  1.105   hannken 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   1850  1.105   hannken 	if (error)
   1851  1.105   hannken 		return error;
   1852   1.72        ad 	error = (VCALL(vp, VOFFSET(vop_setextattr), &a));
   1853  1.105   hannken 	vop_post(vp, mp, mpsafe, FST_NO);
   1854   1.72        ad 	return error;
   1855   1.51   thorpej }
   1856   1.51   thorpej 
   1857   1.33  jdolecek const struct vnodeop_desc * const vfs_op_descs[] = {
   1858    1.1       cgd 	&vop_default_desc,	/* MUST BE FIRST */
   1859    1.1       cgd 
   1860   1.88   hannken 	&vop_bwrite_desc,
   1861    1.1       cgd 	&vop_lookup_desc,
   1862    1.1       cgd 	&vop_create_desc,
   1863    1.1       cgd 	&vop_mknod_desc,
   1864    1.1       cgd 	&vop_open_desc,
   1865    1.1       cgd 	&vop_close_desc,
   1866    1.1       cgd 	&vop_access_desc,
   1867    1.1       cgd 	&vop_getattr_desc,
   1868    1.1       cgd 	&vop_setattr_desc,
   1869    1.1       cgd 	&vop_read_desc,
   1870    1.1       cgd 	&vop_write_desc,
   1871   1.93  dholland 	&vop_fallocate_desc,
   1872   1.93  dholland 	&vop_fdiscard_desc,
   1873    1.1       cgd 	&vop_ioctl_desc,
   1874   1.18  wrstuden 	&vop_fcntl_desc,
   1875    1.3   mycroft 	&vop_poll_desc,
   1876   1.40  jdolecek 	&vop_kqfilter_desc,
   1877   1.10      fvdl 	&vop_revoke_desc,
   1878    1.1       cgd 	&vop_mmap_desc,
   1879    1.1       cgd 	&vop_fsync_desc,
   1880    1.1       cgd 	&vop_seek_desc,
   1881    1.1       cgd 	&vop_remove_desc,
   1882    1.1       cgd 	&vop_link_desc,
   1883    1.1       cgd 	&vop_rename_desc,
   1884    1.1       cgd 	&vop_mkdir_desc,
   1885    1.1       cgd 	&vop_rmdir_desc,
   1886    1.1       cgd 	&vop_symlink_desc,
   1887    1.1       cgd 	&vop_readdir_desc,
   1888    1.1       cgd 	&vop_readlink_desc,
   1889    1.1       cgd 	&vop_abortop_desc,
   1890    1.1       cgd 	&vop_inactive_desc,
   1891    1.1       cgd 	&vop_reclaim_desc,
   1892    1.1       cgd 	&vop_lock_desc,
   1893    1.1       cgd 	&vop_unlock_desc,
   1894    1.1       cgd 	&vop_bmap_desc,
   1895   1.46   hannken 	&vop_strategy_desc,
   1896    1.1       cgd 	&vop_print_desc,
   1897    1.1       cgd 	&vop_islocked_desc,
   1898    1.1       cgd 	&vop_pathconf_desc,
   1899    1.1       cgd 	&vop_advlock_desc,
   1900    1.1       cgd 	&vop_whiteout_desc,
   1901   1.26       chs 	&vop_getpages_desc,
   1902   1.26       chs 	&vop_putpages_desc,
   1903   1.51   thorpej 	&vop_closeextattr_desc,
   1904   1.51   thorpej 	&vop_getextattr_desc,
   1905   1.51   thorpej 	&vop_listextattr_desc,
   1906   1.51   thorpej 	&vop_openextattr_desc,
   1907   1.51   thorpej 	&vop_deleteextattr_desc,
   1908   1.51   thorpej 	&vop_setextattr_desc,
   1909    1.1       cgd 	NULL
   1910    1.1       cgd };
   1911