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