Home | History | Annotate | Line # | Download | only in kern
vnode_if.c revision 1.107.10.2
      1  1.107.10.2    martin /*	$NetBSD: vnode_if.c,v 1.107.10.2 2020/05/19 16:24:38 martin 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.10.1    martin  *	NetBSD: vnode_if.src,v 1.77.10.1 2019/10/15 18:12:25 martin Exp
      9         1.1       cgd  * by the script:
     10  1.107.10.1    martin  *	NetBSD: vnode_if.sh,v 1.66.10.1 2019/10/15 18:12:25 martin 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.107.10.2    martin __KERNEL_RCSID(0, "$NetBSD: vnode_if.c,v 1.107.10.2 2020/05/19 16:24:38 martin 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.107.10.1    martin 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.107.10.1    martin 	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.107.10.1    martin 			} else if (op == FST_LAZY) {
     77  1.107.10.1    martin 				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.107.10.1    martin 	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.107.10.2    martin 	error = vop_pre(vp, &mp, &mpsafe, FST_NO);
   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.107.10.2    martin 	vop_post(vp, mp, mpsafe, FST_NO);
   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