[BACK]Return to rumpvnode_if.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / rump / librump / rumpvfs

Annotation of src/sys/rump/librump/rumpvfs/rumpvnode_if.c, Revision 1.1.10.3

1.1.10.3! yamt        1: /*     $NetBSD: rumpvnode_if.c,v 1.1.10.2 2009/05/04 08:14:31 yamt Exp $       */
1.1.10.2  yamt        2:
                      3: /*
                      4:  * Warning: DO NOT EDIT! This file is automatically generated!
                      5:  * (Modifications made here may easily be lost!)
                      6:  *
                      7:  * Created from the file:
                      8:  *     NetBSD: vnode_if.src,v 1.58 2008/11/15 19:08:12 pooka Exp
                      9:  * by the script:
1.1.10.3! yamt       10:  *     NetBSD: vnode_if.sh,v 1.53 2009/10/15 00:29:40 pooka Exp
1.1.10.2  yamt       11:  */
                     12:
                     13: /*
                     14:  * Copyright (c) 1992, 1993, 1994, 1995
                     15:  *     The Regents of the University of California.  All rights reserved.
                     16:  *
                     17:  * Redistribution and use in source and binary forms, with or without
                     18:  * modification, are permitted provided that the following conditions
                     19:  * are met:
                     20:  * 1. Redistributions of source code must retain the above copyright
                     21:  *    notice, this list of conditions and the following disclaimer.
                     22:  * 2. Redistributions in binary form must reproduce the above copyright
                     23:  *    notice, this list of conditions and the following disclaimer in the
                     24:  *    documentation and/or other materials provided with the distribution.
                     25:  * 3. Neither the name of the University nor the names of its contributors
                     26:  *    may be used to endorse or promote products derived from this software
                     27:  *    without specific prior written permission.
                     28:  *
                     29:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     30:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     31:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     32:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     33:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     34:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     35:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     36:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     37:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     38:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     39:  * SUCH DAMAGE.
                     40:  */
                     41:
                     42: #include <sys/cdefs.h>
1.1.10.3! yamt       43: __KERNEL_RCSID(0, "$NetBSD: rumpvnode_if.c,v 1.1.10.2 2009/05/04 08:14:31 yamt Exp $");
1.1.10.2  yamt       44:
                     45: #include <sys/param.h>
                     46: #include <sys/mount.h>
                     47: #include <sys/buf.h>
                     48: #include <sys/vnode.h>
                     49: #include <sys/lock.h>
                     50: #include <rump/rumpvnode_if.h>
1.1.10.3! yamt       51: #include "rump_private.h"
1.1.10.2  yamt       52:
                     53: const struct vnodeop_desc rump_vop_default_desc = {
                     54:        0,
                     55:        "default",
                     56:        0,
                     57:        NULL,
                     58:        VDESC_NO_OFFSET,
                     59:        VDESC_NO_OFFSET,
                     60:        VDESC_NO_OFFSET,
                     61:        NULL,
                     62: };
                     63:
                     64:
                     65: /* Special cases: */
                     66:
                     67: const int rump_vop_bwrite_vp_offsets[] = {
                     68:        VDESC_NO_OFFSET
                     69: };
                     70: const struct vnodeop_desc rump_vop_bwrite_desc = {
                     71:        RUMP_VOP_BWRITE_DESCOFFSET,
                     72:        "rump_vop_bwrite",
                     73:        0,
                     74:        rump_vop_bwrite_vp_offsets,
                     75:        VDESC_NO_OFFSET,
                     76:        VDESC_NO_OFFSET,
                     77:        VDESC_NO_OFFSET,
                     78:        NULL,
                     79: };
                     80: int
                     81: RUMP_VOP_BWRITE(struct buf *bp)
                     82: {
                     83:        int error;
                     84:        bool mpsafe;
                     85:        struct rump_vop_bwrite_args a;
                     86:        a.a_desc = VDESC(rump_vop_bwrite);
                     87:        a.a_bp = bp;
                     88:        mpsafe = (bp->b_vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt       89:        rump_schedule();
1.1.10.2  yamt       90:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                     91:        error = (VCALL(bp->b_vp, VOFFSET(rump_vop_bwrite), &a));
                     92:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt       93:        rump_unschedule();
1.1.10.2  yamt       94:        return error;
                     95: }
                     96:
                     97: /* End of special cases */
                     98:
                     99: const int rump_vop_lookup_vp_offsets[] = {
                    100:        VOPARG_OFFSETOF(struct rump_vop_lookup_args,a_dvp),
                    101:        VDESC_NO_OFFSET
                    102: };
                    103: const struct vnodeop_desc rump_vop_lookup_desc = {
                    104:        RUMP_VOP_LOOKUP_DESCOFFSET,
                    105:        "rump_vop_lookup",
                    106:        0,
                    107:        rump_vop_lookup_vp_offsets,
                    108:        VOPARG_OFFSETOF(struct rump_vop_lookup_args, a_vpp),
                    109:        VDESC_NO_OFFSET,
                    110:        VOPARG_OFFSETOF(struct rump_vop_lookup_args, a_cnp),
                    111:        NULL,
                    112: };
                    113: int
                    114: RUMP_VOP_LOOKUP(struct vnode *dvp,
                    115:     struct vnode **vpp,
                    116:     struct componentname *cnp)
                    117: {
                    118:        int error;
                    119:        bool mpsafe;
                    120:        struct rump_vop_lookup_args a;
                    121:        a.a_desc = VDESC(rump_vop_lookup);
                    122:        a.a_dvp = dvp;
                    123:        a.a_vpp = vpp;
                    124:        a.a_cnp = cnp;
                    125:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      126:        rump_schedule();
1.1.10.2  yamt      127:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    128:        error = (VCALL(dvp, VOFFSET(rump_vop_lookup), &a));
                    129:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      130:        rump_unschedule();
1.1.10.2  yamt      131: #ifdef DIAGNOSTIC
                    132:        if (error == 0)
                    133:                KASSERT((*vpp)->v_size != VSIZENOTSET
                    134:                    && (*vpp)->v_writesize != VSIZENOTSET);
                    135: #endif /* DIAGNOSTIC */
                    136:        return error;
                    137: }
                    138:
                    139: const int rump_vop_create_vp_offsets[] = {
                    140:        VOPARG_OFFSETOF(struct rump_vop_create_args,a_dvp),
                    141:        VDESC_NO_OFFSET
                    142: };
                    143: const struct vnodeop_desc rump_vop_create_desc = {
                    144:        RUMP_VOP_CREATE_DESCOFFSET,
                    145:        "rump_vop_create",
                    146:        0 | VDESC_VP0_WILLPUT,
                    147:        rump_vop_create_vp_offsets,
                    148:        VOPARG_OFFSETOF(struct rump_vop_create_args, a_vpp),
                    149:        VDESC_NO_OFFSET,
                    150:        VOPARG_OFFSETOF(struct rump_vop_create_args, a_cnp),
                    151:        NULL,
                    152: };
                    153: int
                    154: RUMP_VOP_CREATE(struct vnode *dvp,
                    155:     struct vnode **vpp,
                    156:     struct componentname *cnp,
                    157:     struct vattr *vap)
                    158: {
                    159:        int error;
                    160:        bool mpsafe;
                    161:        struct rump_vop_create_args a;
                    162:        a.a_desc = VDESC(rump_vop_create);
                    163:        a.a_dvp = dvp;
                    164:        a.a_vpp = vpp;
                    165:        a.a_cnp = cnp;
                    166:        a.a_vap = vap;
                    167:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      168:        rump_schedule();
1.1.10.2  yamt      169:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    170:        error = (VCALL(dvp, VOFFSET(rump_vop_create), &a));
                    171:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      172:        rump_unschedule();
1.1.10.2  yamt      173: #ifdef DIAGNOSTIC
                    174:        if (error == 0)
                    175:                KASSERT((*vpp)->v_size != VSIZENOTSET
                    176:                    && (*vpp)->v_writesize != VSIZENOTSET);
                    177: #endif /* DIAGNOSTIC */
                    178:        return error;
                    179: }
                    180:
                    181: const int rump_vop_mknod_vp_offsets[] = {
                    182:        VOPARG_OFFSETOF(struct rump_vop_mknod_args,a_dvp),
                    183:        VDESC_NO_OFFSET
                    184: };
                    185: const struct vnodeop_desc rump_vop_mknod_desc = {
                    186:        RUMP_VOP_MKNOD_DESCOFFSET,
                    187:        "rump_vop_mknod",
                    188:        0 | VDESC_VP0_WILLPUT,
                    189:        rump_vop_mknod_vp_offsets,
                    190:        VOPARG_OFFSETOF(struct rump_vop_mknod_args, a_vpp),
                    191:        VDESC_NO_OFFSET,
                    192:        VOPARG_OFFSETOF(struct rump_vop_mknod_args, a_cnp),
                    193:        NULL,
                    194: };
                    195: int
                    196: RUMP_VOP_MKNOD(struct vnode *dvp,
                    197:     struct vnode **vpp,
                    198:     struct componentname *cnp,
                    199:     struct vattr *vap)
                    200: {
                    201:        int error;
                    202:        bool mpsafe;
                    203:        struct rump_vop_mknod_args a;
                    204:        a.a_desc = VDESC(rump_vop_mknod);
                    205:        a.a_dvp = dvp;
                    206:        a.a_vpp = vpp;
                    207:        a.a_cnp = cnp;
                    208:        a.a_vap = vap;
                    209:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      210:        rump_schedule();
1.1.10.2  yamt      211:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    212:        error = (VCALL(dvp, VOFFSET(rump_vop_mknod), &a));
                    213:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      214:        rump_unschedule();
1.1.10.2  yamt      215: #ifdef DIAGNOSTIC
                    216:        if (error == 0)
                    217:                KASSERT((*vpp)->v_size != VSIZENOTSET
                    218:                    && (*vpp)->v_writesize != VSIZENOTSET);
                    219: #endif /* DIAGNOSTIC */
                    220:        return error;
                    221: }
                    222:
                    223: const int rump_vop_open_vp_offsets[] = {
                    224:        VOPARG_OFFSETOF(struct rump_vop_open_args,a_vp),
                    225:        VDESC_NO_OFFSET
                    226: };
                    227: const struct vnodeop_desc rump_vop_open_desc = {
                    228:        RUMP_VOP_OPEN_DESCOFFSET,
                    229:        "rump_vop_open",
                    230:        0,
                    231:        rump_vop_open_vp_offsets,
                    232:        VDESC_NO_OFFSET,
                    233:        VOPARG_OFFSETOF(struct rump_vop_open_args, a_cred),
                    234:        VDESC_NO_OFFSET,
                    235:        NULL,
                    236: };
                    237: int
                    238: RUMP_VOP_OPEN(struct vnode *vp,
                    239:     int mode,
                    240:     kauth_cred_t cred)
                    241: {
                    242:        int error;
                    243:        bool mpsafe;
                    244:        struct rump_vop_open_args a;
                    245:        a.a_desc = VDESC(rump_vop_open);
                    246:        a.a_vp = vp;
                    247:        a.a_mode = mode;
                    248:        a.a_cred = cred;
                    249:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      250:        rump_schedule();
1.1.10.2  yamt      251:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    252:        error = (VCALL(vp, VOFFSET(rump_vop_open), &a));
                    253:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      254:        rump_unschedule();
1.1.10.2  yamt      255:        return error;
                    256: }
                    257:
                    258: const int rump_vop_close_vp_offsets[] = {
                    259:        VOPARG_OFFSETOF(struct rump_vop_close_args,a_vp),
                    260:        VDESC_NO_OFFSET
                    261: };
                    262: const struct vnodeop_desc rump_vop_close_desc = {
                    263:        RUMP_VOP_CLOSE_DESCOFFSET,
                    264:        "rump_vop_close",
                    265:        0,
                    266:        rump_vop_close_vp_offsets,
                    267:        VDESC_NO_OFFSET,
                    268:        VOPARG_OFFSETOF(struct rump_vop_close_args, a_cred),
                    269:        VDESC_NO_OFFSET,
                    270:        NULL,
                    271: };
                    272: int
                    273: RUMP_VOP_CLOSE(struct vnode *vp,
                    274:     int fflag,
                    275:     kauth_cred_t cred)
                    276: {
                    277:        int error;
                    278:        bool mpsafe;
                    279:        struct rump_vop_close_args a;
                    280:        a.a_desc = VDESC(rump_vop_close);
                    281:        a.a_vp = vp;
                    282:        a.a_fflag = fflag;
                    283:        a.a_cred = cred;
                    284:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      285:        rump_schedule();
1.1.10.2  yamt      286:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    287:        error = (VCALL(vp, VOFFSET(rump_vop_close), &a));
                    288:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      289:        rump_unschedule();
1.1.10.2  yamt      290:        return error;
                    291: }
                    292:
                    293: const int rump_vop_access_vp_offsets[] = {
                    294:        VOPARG_OFFSETOF(struct rump_vop_access_args,a_vp),
                    295:        VDESC_NO_OFFSET
                    296: };
                    297: const struct vnodeop_desc rump_vop_access_desc = {
                    298:        RUMP_VOP_ACCESS_DESCOFFSET,
                    299:        "rump_vop_access",
                    300:        0,
                    301:        rump_vop_access_vp_offsets,
                    302:        VDESC_NO_OFFSET,
                    303:        VOPARG_OFFSETOF(struct rump_vop_access_args, a_cred),
                    304:        VDESC_NO_OFFSET,
                    305:        NULL,
                    306: };
                    307: int
                    308: RUMP_VOP_ACCESS(struct vnode *vp,
                    309:     int mode,
                    310:     kauth_cred_t cred)
                    311: {
                    312:        int error;
                    313:        bool mpsafe;
                    314:        struct rump_vop_access_args a;
                    315:        a.a_desc = VDESC(rump_vop_access);
                    316:        a.a_vp = vp;
                    317:        a.a_mode = mode;
                    318:        a.a_cred = cred;
                    319:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      320:        rump_schedule();
1.1.10.2  yamt      321:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    322:        error = (VCALL(vp, VOFFSET(rump_vop_access), &a));
                    323:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      324:        rump_unschedule();
1.1.10.2  yamt      325:        return error;
                    326: }
                    327:
                    328: const int rump_vop_getattr_vp_offsets[] = {
                    329:        VOPARG_OFFSETOF(struct rump_vop_getattr_args,a_vp),
                    330:        VDESC_NO_OFFSET
                    331: };
                    332: const struct vnodeop_desc rump_vop_getattr_desc = {
                    333:        RUMP_VOP_GETATTR_DESCOFFSET,
                    334:        "rump_vop_getattr",
                    335:        0,
                    336:        rump_vop_getattr_vp_offsets,
                    337:        VDESC_NO_OFFSET,
                    338:        VOPARG_OFFSETOF(struct rump_vop_getattr_args, a_cred),
                    339:        VDESC_NO_OFFSET,
                    340:        NULL,
                    341: };
                    342: int
                    343: RUMP_VOP_GETATTR(struct vnode *vp,
                    344:     struct vattr *vap,
                    345:     kauth_cred_t cred)
                    346: {
                    347:        int error;
                    348:        bool mpsafe;
                    349:        struct rump_vop_getattr_args a;
                    350:        a.a_desc = VDESC(rump_vop_getattr);
                    351:        a.a_vp = vp;
                    352:        a.a_vap = vap;
                    353:        a.a_cred = cred;
                    354:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      355:        rump_schedule();
1.1.10.2  yamt      356:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    357:        error = (VCALL(vp, VOFFSET(rump_vop_getattr), &a));
                    358:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      359:        rump_unschedule();
1.1.10.2  yamt      360:        return error;
                    361: }
                    362:
                    363: const int rump_vop_setattr_vp_offsets[] = {
                    364:        VOPARG_OFFSETOF(struct rump_vop_setattr_args,a_vp),
                    365:        VDESC_NO_OFFSET
                    366: };
                    367: const struct vnodeop_desc rump_vop_setattr_desc = {
                    368:        RUMP_VOP_SETATTR_DESCOFFSET,
                    369:        "rump_vop_setattr",
                    370:        0,
                    371:        rump_vop_setattr_vp_offsets,
                    372:        VDESC_NO_OFFSET,
                    373:        VOPARG_OFFSETOF(struct rump_vop_setattr_args, a_cred),
                    374:        VDESC_NO_OFFSET,
                    375:        NULL,
                    376: };
                    377: int
                    378: RUMP_VOP_SETATTR(struct vnode *vp,
                    379:     struct vattr *vap,
                    380:     kauth_cred_t cred)
                    381: {
                    382:        int error;
                    383:        bool mpsafe;
                    384:        struct rump_vop_setattr_args a;
                    385:        a.a_desc = VDESC(rump_vop_setattr);
                    386:        a.a_vp = vp;
                    387:        a.a_vap = vap;
                    388:        a.a_cred = cred;
                    389:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      390:        rump_schedule();
1.1.10.2  yamt      391:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    392:        error = (VCALL(vp, VOFFSET(rump_vop_setattr), &a));
                    393:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      394:        rump_unschedule();
1.1.10.2  yamt      395:        return error;
                    396: }
                    397:
                    398: const int rump_vop_read_vp_offsets[] = {
                    399:        VOPARG_OFFSETOF(struct rump_vop_read_args,a_vp),
                    400:        VDESC_NO_OFFSET
                    401: };
                    402: const struct vnodeop_desc rump_vop_read_desc = {
                    403:        RUMP_VOP_READ_DESCOFFSET,
                    404:        "rump_vop_read",
                    405:        0,
                    406:        rump_vop_read_vp_offsets,
                    407:        VDESC_NO_OFFSET,
                    408:        VOPARG_OFFSETOF(struct rump_vop_read_args, a_cred),
                    409:        VDESC_NO_OFFSET,
                    410:        NULL,
                    411: };
                    412: int
                    413: RUMP_VOP_READ(struct vnode *vp,
                    414:     struct uio *uio,
                    415:     int ioflag,
                    416:     kauth_cred_t cred)
                    417: {
                    418:        int error;
                    419:        bool mpsafe;
                    420:        struct rump_vop_read_args a;
                    421:        a.a_desc = VDESC(rump_vop_read);
                    422:        a.a_vp = vp;
                    423:        a.a_uio = uio;
                    424:        a.a_ioflag = ioflag;
                    425:        a.a_cred = cred;
                    426:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      427:        rump_schedule();
1.1.10.2  yamt      428:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    429:        error = (VCALL(vp, VOFFSET(rump_vop_read), &a));
                    430:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      431:        rump_unschedule();
1.1.10.2  yamt      432:        return error;
                    433: }
                    434:
                    435: const int rump_vop_write_vp_offsets[] = {
                    436:        VOPARG_OFFSETOF(struct rump_vop_write_args,a_vp),
                    437:        VDESC_NO_OFFSET
                    438: };
                    439: const struct vnodeop_desc rump_vop_write_desc = {
                    440:        RUMP_VOP_WRITE_DESCOFFSET,
                    441:        "rump_vop_write",
                    442:        0,
                    443:        rump_vop_write_vp_offsets,
                    444:        VDESC_NO_OFFSET,
                    445:        VOPARG_OFFSETOF(struct rump_vop_write_args, a_cred),
                    446:        VDESC_NO_OFFSET,
                    447:        NULL,
                    448: };
                    449: int
                    450: RUMP_VOP_WRITE(struct vnode *vp,
                    451:     struct uio *uio,
                    452:     int ioflag,
                    453:     kauth_cred_t cred)
                    454: {
                    455:        int error;
                    456:        bool mpsafe;
                    457:        struct rump_vop_write_args a;
                    458:        a.a_desc = VDESC(rump_vop_write);
                    459:        a.a_vp = vp;
                    460:        a.a_uio = uio;
                    461:        a.a_ioflag = ioflag;
                    462:        a.a_cred = cred;
                    463:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      464:        rump_schedule();
1.1.10.2  yamt      465:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    466:        error = (VCALL(vp, VOFFSET(rump_vop_write), &a));
                    467:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      468:        rump_unschedule();
1.1.10.2  yamt      469:        return error;
                    470: }
                    471:
                    472: const int rump_vop_ioctl_vp_offsets[] = {
                    473:        VOPARG_OFFSETOF(struct rump_vop_ioctl_args,a_vp),
                    474:        VDESC_NO_OFFSET
                    475: };
                    476: const struct vnodeop_desc rump_vop_ioctl_desc = {
                    477:        RUMP_VOP_IOCTL_DESCOFFSET,
                    478:        "rump_vop_ioctl",
                    479:        0,
                    480:        rump_vop_ioctl_vp_offsets,
                    481:        VDESC_NO_OFFSET,
                    482:        VOPARG_OFFSETOF(struct rump_vop_ioctl_args, a_cred),
                    483:        VDESC_NO_OFFSET,
                    484:        NULL,
                    485: };
                    486: int
                    487: RUMP_VOP_IOCTL(struct vnode *vp,
                    488:     u_long command,
                    489:     void *data,
                    490:     int fflag,
                    491:     kauth_cred_t cred)
                    492: {
                    493:        int error;
                    494:        bool mpsafe;
                    495:        struct rump_vop_ioctl_args a;
                    496:        a.a_desc = VDESC(rump_vop_ioctl);
                    497:        a.a_vp = vp;
                    498:        a.a_command = command;
                    499:        a.a_data = data;
                    500:        a.a_fflag = fflag;
                    501:        a.a_cred = cred;
                    502:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      503:        rump_schedule();
1.1.10.2  yamt      504:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    505:        error = (VCALL(vp, VOFFSET(rump_vop_ioctl), &a));
                    506:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      507:        rump_unschedule();
1.1.10.2  yamt      508:        return error;
                    509: }
                    510:
                    511: const int rump_vop_fcntl_vp_offsets[] = {
                    512:        VOPARG_OFFSETOF(struct rump_vop_fcntl_args,a_vp),
                    513:        VDESC_NO_OFFSET
                    514: };
                    515: const struct vnodeop_desc rump_vop_fcntl_desc = {
                    516:        RUMP_VOP_FCNTL_DESCOFFSET,
                    517:        "rump_vop_fcntl",
                    518:        0,
                    519:        rump_vop_fcntl_vp_offsets,
                    520:        VDESC_NO_OFFSET,
                    521:        VOPARG_OFFSETOF(struct rump_vop_fcntl_args, a_cred),
                    522:        VDESC_NO_OFFSET,
                    523:        NULL,
                    524: };
                    525: int
                    526: RUMP_VOP_FCNTL(struct vnode *vp,
                    527:     u_int command,
                    528:     void *data,
                    529:     int fflag,
                    530:     kauth_cred_t cred)
                    531: {
                    532:        int error;
                    533:        bool mpsafe;
                    534:        struct rump_vop_fcntl_args a;
                    535:        a.a_desc = VDESC(rump_vop_fcntl);
                    536:        a.a_vp = vp;
                    537:        a.a_command = command;
                    538:        a.a_data = data;
                    539:        a.a_fflag = fflag;
                    540:        a.a_cred = cred;
                    541:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      542:        rump_schedule();
1.1.10.2  yamt      543:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    544:        error = (VCALL(vp, VOFFSET(rump_vop_fcntl), &a));
                    545:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      546:        rump_unschedule();
1.1.10.2  yamt      547:        return error;
                    548: }
                    549:
                    550: const int rump_vop_poll_vp_offsets[] = {
                    551:        VOPARG_OFFSETOF(struct rump_vop_poll_args,a_vp),
                    552:        VDESC_NO_OFFSET
                    553: };
                    554: const struct vnodeop_desc rump_vop_poll_desc = {
                    555:        RUMP_VOP_POLL_DESCOFFSET,
                    556:        "rump_vop_poll",
                    557:        0,
                    558:        rump_vop_poll_vp_offsets,
                    559:        VDESC_NO_OFFSET,
                    560:        VDESC_NO_OFFSET,
                    561:        VDESC_NO_OFFSET,
                    562:        NULL,
                    563: };
                    564: int
                    565: RUMP_VOP_POLL(struct vnode *vp,
                    566:     int events)
                    567: {
                    568:        int error;
                    569:        bool mpsafe;
                    570:        struct rump_vop_poll_args a;
                    571:        a.a_desc = VDESC(rump_vop_poll);
                    572:        a.a_vp = vp;
                    573:        a.a_events = events;
                    574:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      575:        rump_schedule();
1.1.10.2  yamt      576:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    577:        error = (VCALL(vp, VOFFSET(rump_vop_poll), &a));
                    578:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      579:        rump_unschedule();
1.1.10.2  yamt      580:        return error;
                    581: }
                    582:
                    583: const int rump_vop_kqfilter_vp_offsets[] = {
                    584:        VOPARG_OFFSETOF(struct rump_vop_kqfilter_args,a_vp),
                    585:        VDESC_NO_OFFSET
                    586: };
                    587: const struct vnodeop_desc rump_vop_kqfilter_desc = {
                    588:        RUMP_VOP_KQFILTER_DESCOFFSET,
                    589:        "rump_vop_kqfilter",
                    590:        0,
                    591:        rump_vop_kqfilter_vp_offsets,
                    592:        VDESC_NO_OFFSET,
                    593:        VDESC_NO_OFFSET,
                    594:        VDESC_NO_OFFSET,
                    595:        NULL,
                    596: };
                    597: int
                    598: RUMP_VOP_KQFILTER(struct vnode *vp,
                    599:     struct knote *kn)
                    600: {
                    601:        int error;
                    602:        bool mpsafe;
                    603:        struct rump_vop_kqfilter_args a;
                    604:        a.a_desc = VDESC(rump_vop_kqfilter);
                    605:        a.a_vp = vp;
                    606:        a.a_kn = kn;
                    607:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      608:        rump_schedule();
1.1.10.2  yamt      609:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    610:        error = (VCALL(vp, VOFFSET(rump_vop_kqfilter), &a));
                    611:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      612:        rump_unschedule();
1.1.10.2  yamt      613:        return error;
                    614: }
                    615:
                    616: const int rump_vop_revoke_vp_offsets[] = {
                    617:        VOPARG_OFFSETOF(struct rump_vop_revoke_args,a_vp),
                    618:        VDESC_NO_OFFSET
                    619: };
                    620: const struct vnodeop_desc rump_vop_revoke_desc = {
                    621:        RUMP_VOP_REVOKE_DESCOFFSET,
                    622:        "rump_vop_revoke",
                    623:        0,
                    624:        rump_vop_revoke_vp_offsets,
                    625:        VDESC_NO_OFFSET,
                    626:        VDESC_NO_OFFSET,
                    627:        VDESC_NO_OFFSET,
                    628:        NULL,
                    629: };
                    630: int
                    631: RUMP_VOP_REVOKE(struct vnode *vp,
                    632:     int flags)
                    633: {
                    634:        int error;
                    635:        bool mpsafe;
                    636:        struct rump_vop_revoke_args a;
                    637:        a.a_desc = VDESC(rump_vop_revoke);
                    638:        a.a_vp = vp;
                    639:        a.a_flags = flags;
                    640:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      641:        rump_schedule();
1.1.10.2  yamt      642:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    643:        error = (VCALL(vp, VOFFSET(rump_vop_revoke), &a));
                    644:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      645:        rump_unschedule();
1.1.10.2  yamt      646:        return error;
                    647: }
                    648:
                    649: const int rump_vop_mmap_vp_offsets[] = {
                    650:        VOPARG_OFFSETOF(struct rump_vop_mmap_args,a_vp),
                    651:        VDESC_NO_OFFSET
                    652: };
                    653: const struct vnodeop_desc rump_vop_mmap_desc = {
                    654:        RUMP_VOP_MMAP_DESCOFFSET,
                    655:        "rump_vop_mmap",
                    656:        0,
                    657:        rump_vop_mmap_vp_offsets,
                    658:        VDESC_NO_OFFSET,
                    659:        VOPARG_OFFSETOF(struct rump_vop_mmap_args, a_cred),
                    660:        VDESC_NO_OFFSET,
                    661:        NULL,
                    662: };
                    663: int
                    664: RUMP_VOP_MMAP(struct vnode *vp,
                    665:     int prot,
                    666:     kauth_cred_t cred)
                    667: {
                    668:        int error;
                    669:        bool mpsafe;
                    670:        struct rump_vop_mmap_args a;
                    671:        a.a_desc = VDESC(rump_vop_mmap);
                    672:        a.a_vp = vp;
                    673:        a.a_prot = prot;
                    674:        a.a_cred = cred;
                    675:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      676:        rump_schedule();
1.1.10.2  yamt      677:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    678:        error = (VCALL(vp, VOFFSET(rump_vop_mmap), &a));
                    679:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      680:        rump_unschedule();
1.1.10.2  yamt      681:        return error;
                    682: }
                    683:
                    684: const int rump_vop_fsync_vp_offsets[] = {
                    685:        VOPARG_OFFSETOF(struct rump_vop_fsync_args,a_vp),
                    686:        VDESC_NO_OFFSET
                    687: };
                    688: const struct vnodeop_desc rump_vop_fsync_desc = {
                    689:        RUMP_VOP_FSYNC_DESCOFFSET,
                    690:        "rump_vop_fsync",
                    691:        0,
                    692:        rump_vop_fsync_vp_offsets,
                    693:        VDESC_NO_OFFSET,
                    694:        VOPARG_OFFSETOF(struct rump_vop_fsync_args, a_cred),
                    695:        VDESC_NO_OFFSET,
                    696:        NULL,
                    697: };
                    698: int
                    699: RUMP_VOP_FSYNC(struct vnode *vp,
                    700:     kauth_cred_t cred,
                    701:     int flags,
                    702:     off_t offlo,
                    703:     off_t offhi)
                    704: {
                    705:        int error;
                    706:        bool mpsafe;
                    707:        struct rump_vop_fsync_args a;
                    708:        a.a_desc = VDESC(rump_vop_fsync);
                    709:        a.a_vp = vp;
                    710:        a.a_cred = cred;
                    711:        a.a_flags = flags;
                    712:        a.a_offlo = offlo;
                    713:        a.a_offhi = offhi;
                    714:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      715:        rump_schedule();
1.1.10.2  yamt      716:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    717:        error = (VCALL(vp, VOFFSET(rump_vop_fsync), &a));
                    718:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      719:        rump_unschedule();
1.1.10.2  yamt      720:        return error;
                    721: }
                    722:
                    723: const int rump_vop_seek_vp_offsets[] = {
                    724:        VOPARG_OFFSETOF(struct rump_vop_seek_args,a_vp),
                    725:        VDESC_NO_OFFSET
                    726: };
                    727: const struct vnodeop_desc rump_vop_seek_desc = {
                    728:        RUMP_VOP_SEEK_DESCOFFSET,
                    729:        "rump_vop_seek",
                    730:        0,
                    731:        rump_vop_seek_vp_offsets,
                    732:        VDESC_NO_OFFSET,
                    733:        VOPARG_OFFSETOF(struct rump_vop_seek_args, a_cred),
                    734:        VDESC_NO_OFFSET,
                    735:        NULL,
                    736: };
                    737: int
                    738: RUMP_VOP_SEEK(struct vnode *vp,
                    739:     off_t oldoff,
                    740:     off_t newoff,
                    741:     kauth_cred_t cred)
                    742: {
                    743:        int error;
                    744:        bool mpsafe;
                    745:        struct rump_vop_seek_args a;
                    746:        a.a_desc = VDESC(rump_vop_seek);
                    747:        a.a_vp = vp;
                    748:        a.a_oldoff = oldoff;
                    749:        a.a_newoff = newoff;
                    750:        a.a_cred = cred;
                    751:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      752:        rump_schedule();
1.1.10.2  yamt      753:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    754:        error = (VCALL(vp, VOFFSET(rump_vop_seek), &a));
                    755:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      756:        rump_unschedule();
1.1.10.2  yamt      757:        return error;
                    758: }
                    759:
                    760: const int rump_vop_remove_vp_offsets[] = {
                    761:        VOPARG_OFFSETOF(struct rump_vop_remove_args,a_dvp),
                    762:        VOPARG_OFFSETOF(struct rump_vop_remove_args,a_vp),
                    763:        VDESC_NO_OFFSET
                    764: };
                    765: const struct vnodeop_desc rump_vop_remove_desc = {
                    766:        RUMP_VOP_REMOVE_DESCOFFSET,
                    767:        "rump_vop_remove",
                    768:        0 | VDESC_VP0_WILLPUT | VDESC_VP1_WILLPUT,
                    769:        rump_vop_remove_vp_offsets,
                    770:        VDESC_NO_OFFSET,
                    771:        VDESC_NO_OFFSET,
                    772:        VOPARG_OFFSETOF(struct rump_vop_remove_args, a_cnp),
                    773:        NULL,
                    774: };
                    775: int
                    776: RUMP_VOP_REMOVE(struct vnode *dvp,
                    777:     struct vnode *vp,
                    778:     struct componentname *cnp)
                    779: {
                    780:        int error;
                    781:        bool mpsafe;
                    782:        struct rump_vop_remove_args a;
                    783:        a.a_desc = VDESC(rump_vop_remove);
                    784:        a.a_dvp = dvp;
1.1.10.3! yamt      785:        a.a_vp = vp;
1.1.10.2  yamt      786:        a.a_cnp = cnp;
                    787:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      788:        rump_schedule();
1.1.10.2  yamt      789:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    790:        error = (VCALL(dvp, VOFFSET(rump_vop_remove), &a));
                    791:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      792:        rump_unschedule();
1.1.10.2  yamt      793:        return error;
                    794: }
                    795:
                    796: const int rump_vop_link_vp_offsets[] = {
                    797:        VOPARG_OFFSETOF(struct rump_vop_link_args,a_dvp),
                    798:        VOPARG_OFFSETOF(struct rump_vop_link_args,a_vp),
                    799:        VDESC_NO_OFFSET
                    800: };
                    801: const struct vnodeop_desc rump_vop_link_desc = {
                    802:        RUMP_VOP_LINK_DESCOFFSET,
                    803:        "rump_vop_link",
                    804:        0 | VDESC_VP0_WILLPUT,
                    805:        rump_vop_link_vp_offsets,
                    806:        VDESC_NO_OFFSET,
                    807:        VDESC_NO_OFFSET,
                    808:        VOPARG_OFFSETOF(struct rump_vop_link_args, a_cnp),
                    809:        NULL,
                    810: };
                    811: int
                    812: RUMP_VOP_LINK(struct vnode *dvp,
                    813:     struct vnode *vp,
                    814:     struct componentname *cnp)
                    815: {
                    816:        int error;
                    817:        bool mpsafe;
                    818:        struct rump_vop_link_args a;
                    819:        a.a_desc = VDESC(rump_vop_link);
                    820:        a.a_dvp = dvp;
1.1.10.3! yamt      821:        a.a_vp = vp;
1.1.10.2  yamt      822:        a.a_cnp = cnp;
                    823:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      824:        rump_schedule();
1.1.10.2  yamt      825:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    826:        error = (VCALL(dvp, VOFFSET(rump_vop_link), &a));
                    827:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      828:        rump_unschedule();
1.1.10.2  yamt      829:        return error;
                    830: }
                    831:
                    832: const int rump_vop_rename_vp_offsets[] = {
                    833:        VOPARG_OFFSETOF(struct rump_vop_rename_args,a_fdvp),
                    834:        VOPARG_OFFSETOF(struct rump_vop_rename_args,a_fvp),
                    835:        VOPARG_OFFSETOF(struct rump_vop_rename_args,a_tdvp),
                    836:        VOPARG_OFFSETOF(struct rump_vop_rename_args,a_tvp),
                    837:        VDESC_NO_OFFSET
                    838: };
                    839: const struct vnodeop_desc rump_vop_rename_desc = {
                    840:        RUMP_VOP_RENAME_DESCOFFSET,
                    841:        "rump_vop_rename",
                    842:        0 | VDESC_VP0_WILLRELE | VDESC_VP1_WILLRELE | VDESC_VP2_WILLPUT | VDESC_VP3_WILLPUT,
                    843:        rump_vop_rename_vp_offsets,
                    844:        VDESC_NO_OFFSET,
                    845:        VDESC_NO_OFFSET,
                    846:        VOPARG_OFFSETOF(struct rump_vop_rename_args, a_fcnp),
                    847:        NULL,
                    848: };
                    849: int
                    850: RUMP_VOP_RENAME(struct vnode *fdvp,
                    851:     struct vnode *fvp,
                    852:     struct componentname *fcnp,
                    853:     struct vnode *tdvp,
                    854:     struct vnode *tvp,
                    855:     struct componentname *tcnp)
                    856: {
                    857:        int error;
                    858:        bool mpsafe;
                    859:        struct rump_vop_rename_args a;
                    860:        a.a_desc = VDESC(rump_vop_rename);
                    861:        a.a_fdvp = fdvp;
                    862:        a.a_fvp = fvp;
                    863:        a.a_fcnp = fcnp;
                    864:        a.a_tdvp = tdvp;
                    865:        a.a_tvp = tvp;
                    866:        a.a_tcnp = tcnp;
                    867:        mpsafe = (fdvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      868:        rump_schedule();
1.1.10.2  yamt      869:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    870:        error = (VCALL(fdvp, VOFFSET(rump_vop_rename), &a));
                    871:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      872:        rump_unschedule();
1.1.10.2  yamt      873:        return error;
                    874: }
                    875:
                    876: const int rump_vop_mkdir_vp_offsets[] = {
                    877:        VOPARG_OFFSETOF(struct rump_vop_mkdir_args,a_dvp),
                    878:        VDESC_NO_OFFSET
                    879: };
                    880: const struct vnodeop_desc rump_vop_mkdir_desc = {
                    881:        RUMP_VOP_MKDIR_DESCOFFSET,
                    882:        "rump_vop_mkdir",
                    883:        0 | VDESC_VP0_WILLPUT,
                    884:        rump_vop_mkdir_vp_offsets,
                    885:        VOPARG_OFFSETOF(struct rump_vop_mkdir_args, a_vpp),
                    886:        VDESC_NO_OFFSET,
                    887:        VOPARG_OFFSETOF(struct rump_vop_mkdir_args, a_cnp),
                    888:        NULL,
                    889: };
                    890: int
                    891: RUMP_VOP_MKDIR(struct vnode *dvp,
                    892:     struct vnode **vpp,
                    893:     struct componentname *cnp,
                    894:     struct vattr *vap)
                    895: {
                    896:        int error;
                    897:        bool mpsafe;
                    898:        struct rump_vop_mkdir_args a;
                    899:        a.a_desc = VDESC(rump_vop_mkdir);
                    900:        a.a_dvp = dvp;
                    901:        a.a_vpp = vpp;
                    902:        a.a_cnp = cnp;
                    903:        a.a_vap = vap;
                    904:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      905:        rump_schedule();
1.1.10.2  yamt      906:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    907:        error = (VCALL(dvp, VOFFSET(rump_vop_mkdir), &a));
                    908:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      909:        rump_unschedule();
1.1.10.2  yamt      910: #ifdef DIAGNOSTIC
                    911:        if (error == 0)
                    912:                KASSERT((*vpp)->v_size != VSIZENOTSET
                    913:                    && (*vpp)->v_writesize != VSIZENOTSET);
                    914: #endif /* DIAGNOSTIC */
                    915:        return error;
                    916: }
                    917:
                    918: const int rump_vop_rmdir_vp_offsets[] = {
                    919:        VOPARG_OFFSETOF(struct rump_vop_rmdir_args,a_dvp),
                    920:        VOPARG_OFFSETOF(struct rump_vop_rmdir_args,a_vp),
                    921:        VDESC_NO_OFFSET
                    922: };
                    923: const struct vnodeop_desc rump_vop_rmdir_desc = {
                    924:        RUMP_VOP_RMDIR_DESCOFFSET,
                    925:        "rump_vop_rmdir",
                    926:        0 | VDESC_VP0_WILLPUT | VDESC_VP1_WILLPUT,
                    927:        rump_vop_rmdir_vp_offsets,
                    928:        VDESC_NO_OFFSET,
                    929:        VDESC_NO_OFFSET,
                    930:        VOPARG_OFFSETOF(struct rump_vop_rmdir_args, a_cnp),
                    931:        NULL,
                    932: };
                    933: int
                    934: RUMP_VOP_RMDIR(struct vnode *dvp,
                    935:     struct vnode *vp,
                    936:     struct componentname *cnp)
                    937: {
                    938:        int error;
                    939:        bool mpsafe;
                    940:        struct rump_vop_rmdir_args a;
                    941:        a.a_desc = VDESC(rump_vop_rmdir);
                    942:        a.a_dvp = dvp;
1.1.10.3! yamt      943:        a.a_vp = vp;
1.1.10.2  yamt      944:        a.a_cnp = cnp;
                    945:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      946:        rump_schedule();
1.1.10.2  yamt      947:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    948:        error = (VCALL(dvp, VOFFSET(rump_vop_rmdir), &a));
                    949:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      950:        rump_unschedule();
1.1.10.2  yamt      951:        return error;
                    952: }
                    953:
                    954: const int rump_vop_symlink_vp_offsets[] = {
                    955:        VOPARG_OFFSETOF(struct rump_vop_symlink_args,a_dvp),
                    956:        VDESC_NO_OFFSET
                    957: };
                    958: const struct vnodeop_desc rump_vop_symlink_desc = {
                    959:        RUMP_VOP_SYMLINK_DESCOFFSET,
                    960:        "rump_vop_symlink",
                    961:        0 | VDESC_VP0_WILLPUT,
                    962:        rump_vop_symlink_vp_offsets,
                    963:        VOPARG_OFFSETOF(struct rump_vop_symlink_args, a_vpp),
                    964:        VDESC_NO_OFFSET,
                    965:        VOPARG_OFFSETOF(struct rump_vop_symlink_args, a_cnp),
                    966:        NULL,
                    967: };
                    968: int
                    969: RUMP_VOP_SYMLINK(struct vnode *dvp,
                    970:     struct vnode **vpp,
                    971:     struct componentname *cnp,
                    972:     struct vattr *vap,
                    973:     char *target)
                    974: {
                    975:        int error;
                    976:        bool mpsafe;
                    977:        struct rump_vop_symlink_args a;
                    978:        a.a_desc = VDESC(rump_vop_symlink);
                    979:        a.a_dvp = dvp;
                    980:        a.a_vpp = vpp;
                    981:        a.a_cnp = cnp;
                    982:        a.a_vap = vap;
                    983:        a.a_target = target;
                    984:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt      985:        rump_schedule();
1.1.10.2  yamt      986:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                    987:        error = (VCALL(dvp, VOFFSET(rump_vop_symlink), &a));
                    988:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt      989:        rump_unschedule();
1.1.10.2  yamt      990: #ifdef DIAGNOSTIC
                    991:        if (error == 0)
                    992:                KASSERT((*vpp)->v_size != VSIZENOTSET
                    993:                    && (*vpp)->v_writesize != VSIZENOTSET);
                    994: #endif /* DIAGNOSTIC */
                    995:        return error;
                    996: }
                    997:
                    998: const int rump_vop_readdir_vp_offsets[] = {
                    999:        VOPARG_OFFSETOF(struct rump_vop_readdir_args,a_vp),
                   1000:        VDESC_NO_OFFSET
                   1001: };
                   1002: const struct vnodeop_desc rump_vop_readdir_desc = {
                   1003:        RUMP_VOP_READDIR_DESCOFFSET,
                   1004:        "rump_vop_readdir",
                   1005:        0,
                   1006:        rump_vop_readdir_vp_offsets,
                   1007:        VDESC_NO_OFFSET,
                   1008:        VOPARG_OFFSETOF(struct rump_vop_readdir_args, a_cred),
                   1009:        VDESC_NO_OFFSET,
                   1010:        NULL,
                   1011: };
                   1012: int
                   1013: RUMP_VOP_READDIR(struct vnode *vp,
                   1014:     struct uio *uio,
                   1015:     kauth_cred_t cred,
                   1016:     int *eofflag,
                   1017:     off_t **cookies,
                   1018:     int *ncookies)
                   1019: {
                   1020:        int error;
                   1021:        bool mpsafe;
                   1022:        struct rump_vop_readdir_args a;
                   1023:        a.a_desc = VDESC(rump_vop_readdir);
                   1024:        a.a_vp = vp;
                   1025:        a.a_uio = uio;
                   1026:        a.a_cred = cred;
                   1027:        a.a_eofflag = eofflag;
                   1028:        a.a_cookies = cookies;
                   1029:        a.a_ncookies = ncookies;
                   1030:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1031:        rump_schedule();
1.1.10.2  yamt     1032:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1033:        error = (VCALL(vp, VOFFSET(rump_vop_readdir), &a));
                   1034:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1035:        rump_unschedule();
1.1.10.2  yamt     1036:        return error;
                   1037: }
                   1038:
                   1039: const int rump_vop_readlink_vp_offsets[] = {
                   1040:        VOPARG_OFFSETOF(struct rump_vop_readlink_args,a_vp),
                   1041:        VDESC_NO_OFFSET
                   1042: };
                   1043: const struct vnodeop_desc rump_vop_readlink_desc = {
                   1044:        RUMP_VOP_READLINK_DESCOFFSET,
                   1045:        "rump_vop_readlink",
                   1046:        0,
                   1047:        rump_vop_readlink_vp_offsets,
                   1048:        VDESC_NO_OFFSET,
                   1049:        VOPARG_OFFSETOF(struct rump_vop_readlink_args, a_cred),
                   1050:        VDESC_NO_OFFSET,
                   1051:        NULL,
                   1052: };
                   1053: int
                   1054: RUMP_VOP_READLINK(struct vnode *vp,
                   1055:     struct uio *uio,
                   1056:     kauth_cred_t cred)
                   1057: {
                   1058:        int error;
                   1059:        bool mpsafe;
                   1060:        struct rump_vop_readlink_args a;
                   1061:        a.a_desc = VDESC(rump_vop_readlink);
                   1062:        a.a_vp = vp;
                   1063:        a.a_uio = uio;
                   1064:        a.a_cred = cred;
                   1065:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1066:        rump_schedule();
1.1.10.2  yamt     1067:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1068:        error = (VCALL(vp, VOFFSET(rump_vop_readlink), &a));
                   1069:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1070:        rump_unschedule();
1.1.10.2  yamt     1071:        return error;
                   1072: }
                   1073:
                   1074: const int rump_vop_abortop_vp_offsets[] = {
                   1075:        VOPARG_OFFSETOF(struct rump_vop_abortop_args,a_dvp),
                   1076:        VDESC_NO_OFFSET
                   1077: };
                   1078: const struct vnodeop_desc rump_vop_abortop_desc = {
                   1079:        RUMP_VOP_ABORTOP_DESCOFFSET,
                   1080:        "rump_vop_abortop",
                   1081:        0,
                   1082:        rump_vop_abortop_vp_offsets,
                   1083:        VDESC_NO_OFFSET,
                   1084:        VDESC_NO_OFFSET,
                   1085:        VOPARG_OFFSETOF(struct rump_vop_abortop_args, a_cnp),
                   1086:        NULL,
                   1087: };
                   1088: int
                   1089: RUMP_VOP_ABORTOP(struct vnode *dvp,
                   1090:     struct componentname *cnp)
                   1091: {
                   1092:        int error;
                   1093:        bool mpsafe;
                   1094:        struct rump_vop_abortop_args a;
                   1095:        a.a_desc = VDESC(rump_vop_abortop);
                   1096:        a.a_dvp = dvp;
                   1097:        a.a_cnp = cnp;
                   1098:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1099:        rump_schedule();
1.1.10.2  yamt     1100:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1101:        error = (VCALL(dvp, VOFFSET(rump_vop_abortop), &a));
                   1102:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1103:        rump_unschedule();
1.1.10.2  yamt     1104:        return error;
                   1105: }
                   1106:
                   1107: const int rump_vop_inactive_vp_offsets[] = {
                   1108:        VOPARG_OFFSETOF(struct rump_vop_inactive_args,a_vp),
                   1109:        VDESC_NO_OFFSET
                   1110: };
                   1111: const struct vnodeop_desc rump_vop_inactive_desc = {
                   1112:        RUMP_VOP_INACTIVE_DESCOFFSET,
                   1113:        "rump_vop_inactive",
                   1114:        0 | VDESC_VP0_WILLUNLOCK,
                   1115:        rump_vop_inactive_vp_offsets,
                   1116:        VDESC_NO_OFFSET,
                   1117:        VDESC_NO_OFFSET,
                   1118:        VDESC_NO_OFFSET,
                   1119:        NULL,
                   1120: };
                   1121: int
                   1122: RUMP_VOP_INACTIVE(struct vnode *vp,
                   1123:     bool *recycle)
                   1124: {
                   1125:        int error;
                   1126:        bool mpsafe;
                   1127:        struct rump_vop_inactive_args a;
                   1128:        a.a_desc = VDESC(rump_vop_inactive);
                   1129:        a.a_vp = vp;
                   1130:        a.a_recycle = recycle;
                   1131:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1132:        rump_schedule();
1.1.10.2  yamt     1133:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1134:        error = (VCALL(vp, VOFFSET(rump_vop_inactive), &a));
                   1135:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1136:        rump_unschedule();
1.1.10.2  yamt     1137:        return error;
                   1138: }
                   1139:
                   1140: const int rump_vop_reclaim_vp_offsets[] = {
                   1141:        VOPARG_OFFSETOF(struct rump_vop_reclaim_args,a_vp),
                   1142:        VDESC_NO_OFFSET
                   1143: };
                   1144: const struct vnodeop_desc rump_vop_reclaim_desc = {
                   1145:        RUMP_VOP_RECLAIM_DESCOFFSET,
                   1146:        "rump_vop_reclaim",
                   1147:        0,
                   1148:        rump_vop_reclaim_vp_offsets,
                   1149:        VDESC_NO_OFFSET,
                   1150:        VDESC_NO_OFFSET,
                   1151:        VDESC_NO_OFFSET,
                   1152:        NULL,
                   1153: };
                   1154: int
                   1155: RUMP_VOP_RECLAIM(struct vnode *vp)
                   1156: {
                   1157:        int error;
                   1158:        bool mpsafe;
                   1159:        struct rump_vop_reclaim_args a;
                   1160:        a.a_desc = VDESC(rump_vop_reclaim);
                   1161:        a.a_vp = vp;
                   1162:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1163:        rump_schedule();
1.1.10.2  yamt     1164:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1165:        error = (VCALL(vp, VOFFSET(rump_vop_reclaim), &a));
                   1166:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1167:        rump_unschedule();
1.1.10.2  yamt     1168:        return error;
                   1169: }
                   1170:
                   1171: const int rump_vop_lock_vp_offsets[] = {
                   1172:        VOPARG_OFFSETOF(struct rump_vop_lock_args,a_vp),
                   1173:        VDESC_NO_OFFSET
                   1174: };
                   1175: const struct vnodeop_desc rump_vop_lock_desc = {
                   1176:        RUMP_VOP_LOCK_DESCOFFSET,
                   1177:        "rump_vop_lock",
                   1178:        0,
                   1179:        rump_vop_lock_vp_offsets,
                   1180:        VDESC_NO_OFFSET,
                   1181:        VDESC_NO_OFFSET,
                   1182:        VDESC_NO_OFFSET,
                   1183:        NULL,
                   1184: };
                   1185: int
                   1186: RUMP_VOP_LOCK(struct vnode *vp,
                   1187:     int flags)
                   1188: {
                   1189:        int error;
                   1190:        bool mpsafe;
                   1191:        struct rump_vop_lock_args a;
                   1192:        a.a_desc = VDESC(rump_vop_lock);
                   1193:        a.a_vp = vp;
                   1194:        a.a_flags = flags;
                   1195:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1196:        rump_schedule();
1.1.10.2  yamt     1197:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1198:        error = (VCALL(vp, VOFFSET(rump_vop_lock), &a));
                   1199:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1200:        rump_unschedule();
1.1.10.2  yamt     1201:        return error;
                   1202: }
                   1203:
                   1204: const int rump_vop_unlock_vp_offsets[] = {
                   1205:        VOPARG_OFFSETOF(struct rump_vop_unlock_args,a_vp),
                   1206:        VDESC_NO_OFFSET
                   1207: };
                   1208: const struct vnodeop_desc rump_vop_unlock_desc = {
                   1209:        RUMP_VOP_UNLOCK_DESCOFFSET,
                   1210:        "rump_vop_unlock",
                   1211:        0,
                   1212:        rump_vop_unlock_vp_offsets,
                   1213:        VDESC_NO_OFFSET,
                   1214:        VDESC_NO_OFFSET,
                   1215:        VDESC_NO_OFFSET,
                   1216:        NULL,
                   1217: };
                   1218: int
                   1219: RUMP_VOP_UNLOCK(struct vnode *vp,
                   1220:     int flags)
                   1221: {
                   1222:        int error;
                   1223:        bool mpsafe;
                   1224:        struct rump_vop_unlock_args a;
                   1225:        a.a_desc = VDESC(rump_vop_unlock);
                   1226:        a.a_vp = vp;
                   1227:        a.a_flags = flags;
                   1228:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1229:        rump_schedule();
1.1.10.2  yamt     1230:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1231:        error = (VCALL(vp, VOFFSET(rump_vop_unlock), &a));
                   1232:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1233:        rump_unschedule();
1.1.10.2  yamt     1234:        return error;
                   1235: }
                   1236:
                   1237: const int rump_vop_bmap_vp_offsets[] = {
                   1238:        VOPARG_OFFSETOF(struct rump_vop_bmap_args,a_vp),
                   1239:        VDESC_NO_OFFSET
                   1240: };
                   1241: const struct vnodeop_desc rump_vop_bmap_desc = {
                   1242:        RUMP_VOP_BMAP_DESCOFFSET,
                   1243:        "rump_vop_bmap",
                   1244:        0,
                   1245:        rump_vop_bmap_vp_offsets,
                   1246:        VOPARG_OFFSETOF(struct rump_vop_bmap_args, a_vpp),
                   1247:        VDESC_NO_OFFSET,
                   1248:        VDESC_NO_OFFSET,
                   1249:        NULL,
                   1250: };
                   1251: int
                   1252: RUMP_VOP_BMAP(struct vnode *vp,
                   1253:     daddr_t bn,
                   1254:     struct vnode **vpp,
                   1255:     daddr_t *bnp,
                   1256:     int *runp)
                   1257: {
                   1258:        int error;
                   1259:        bool mpsafe;
                   1260:        struct rump_vop_bmap_args a;
                   1261:        a.a_desc = VDESC(rump_vop_bmap);
                   1262:        a.a_vp = vp;
                   1263:        a.a_bn = bn;
                   1264:        a.a_vpp = vpp;
                   1265:        a.a_bnp = bnp;
                   1266:        a.a_runp = runp;
                   1267:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1268:        rump_schedule();
1.1.10.2  yamt     1269:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1270:        error = (VCALL(vp, VOFFSET(rump_vop_bmap), &a));
                   1271:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1272:        rump_unschedule();
1.1.10.2  yamt     1273:        return error;
                   1274: }
                   1275:
                   1276: const int rump_vop_strategy_vp_offsets[] = {
                   1277:        VOPARG_OFFSETOF(struct rump_vop_strategy_args,a_vp),
                   1278:        VDESC_NO_OFFSET
                   1279: };
                   1280: const struct vnodeop_desc rump_vop_strategy_desc = {
                   1281:        RUMP_VOP_STRATEGY_DESCOFFSET,
                   1282:        "rump_vop_strategy",
                   1283:        0,
                   1284:        rump_vop_strategy_vp_offsets,
                   1285:        VDESC_NO_OFFSET,
                   1286:        VDESC_NO_OFFSET,
                   1287:        VDESC_NO_OFFSET,
                   1288:        NULL,
                   1289: };
                   1290: int
                   1291: RUMP_VOP_STRATEGY(struct vnode *vp,
                   1292:     struct buf *bp)
                   1293: {
                   1294:        int error;
                   1295:        bool mpsafe;
                   1296:        struct rump_vop_strategy_args a;
                   1297:        a.a_desc = VDESC(rump_vop_strategy);
                   1298:        a.a_vp = vp;
                   1299:        a.a_bp = bp;
                   1300:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1301:        rump_schedule();
1.1.10.2  yamt     1302:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1303:        error = (VCALL(vp, VOFFSET(rump_vop_strategy), &a));
                   1304:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1305:        rump_unschedule();
1.1.10.2  yamt     1306:        return error;
                   1307: }
                   1308:
                   1309: const int rump_vop_print_vp_offsets[] = {
                   1310:        VOPARG_OFFSETOF(struct rump_vop_print_args,a_vp),
                   1311:        VDESC_NO_OFFSET
                   1312: };
                   1313: const struct vnodeop_desc rump_vop_print_desc = {
                   1314:        RUMP_VOP_PRINT_DESCOFFSET,
                   1315:        "rump_vop_print",
                   1316:        0,
                   1317:        rump_vop_print_vp_offsets,
                   1318:        VDESC_NO_OFFSET,
                   1319:        VDESC_NO_OFFSET,
                   1320:        VDESC_NO_OFFSET,
                   1321:        NULL,
                   1322: };
                   1323: int
                   1324: RUMP_VOP_PRINT(struct vnode *vp)
                   1325: {
                   1326:        int error;
                   1327:        bool mpsafe;
                   1328:        struct rump_vop_print_args a;
                   1329:        a.a_desc = VDESC(rump_vop_print);
                   1330:        a.a_vp = vp;
                   1331:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1332:        rump_schedule();
1.1.10.2  yamt     1333:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1334:        error = (VCALL(vp, VOFFSET(rump_vop_print), &a));
                   1335:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1336:        rump_unschedule();
1.1.10.2  yamt     1337:        return error;
                   1338: }
                   1339:
                   1340: const int rump_vop_islocked_vp_offsets[] = {
                   1341:        VOPARG_OFFSETOF(struct rump_vop_islocked_args,a_vp),
                   1342:        VDESC_NO_OFFSET
                   1343: };
                   1344: const struct vnodeop_desc rump_vop_islocked_desc = {
                   1345:        RUMP_VOP_ISLOCKED_DESCOFFSET,
                   1346:        "rump_vop_islocked",
                   1347:        0,
                   1348:        rump_vop_islocked_vp_offsets,
                   1349:        VDESC_NO_OFFSET,
                   1350:        VDESC_NO_OFFSET,
                   1351:        VDESC_NO_OFFSET,
                   1352:        NULL,
                   1353: };
                   1354: int
                   1355: RUMP_VOP_ISLOCKED(struct vnode *vp)
                   1356: {
                   1357:        int error;
                   1358:        bool mpsafe;
                   1359:        struct rump_vop_islocked_args a;
                   1360:        a.a_desc = VDESC(rump_vop_islocked);
                   1361:        a.a_vp = vp;
                   1362:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1363:        rump_schedule();
1.1.10.2  yamt     1364:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1365:        error = (VCALL(vp, VOFFSET(rump_vop_islocked), &a));
                   1366:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1367:        rump_unschedule();
1.1.10.2  yamt     1368:        return error;
                   1369: }
                   1370:
                   1371: const int rump_vop_pathconf_vp_offsets[] = {
                   1372:        VOPARG_OFFSETOF(struct rump_vop_pathconf_args,a_vp),
                   1373:        VDESC_NO_OFFSET
                   1374: };
                   1375: const struct vnodeop_desc rump_vop_pathconf_desc = {
                   1376:        RUMP_VOP_PATHCONF_DESCOFFSET,
                   1377:        "rump_vop_pathconf",
                   1378:        0,
                   1379:        rump_vop_pathconf_vp_offsets,
                   1380:        VDESC_NO_OFFSET,
                   1381:        VDESC_NO_OFFSET,
                   1382:        VDESC_NO_OFFSET,
                   1383:        NULL,
                   1384: };
                   1385: int
                   1386: RUMP_VOP_PATHCONF(struct vnode *vp,
                   1387:     int name,
                   1388:     register_t *retval)
                   1389: {
                   1390:        int error;
                   1391:        bool mpsafe;
                   1392:        struct rump_vop_pathconf_args a;
                   1393:        a.a_desc = VDESC(rump_vop_pathconf);
                   1394:        a.a_vp = vp;
                   1395:        a.a_name = name;
                   1396:        a.a_retval = retval;
                   1397:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1398:        rump_schedule();
1.1.10.2  yamt     1399:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1400:        error = (VCALL(vp, VOFFSET(rump_vop_pathconf), &a));
                   1401:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1402:        rump_unschedule();
1.1.10.2  yamt     1403:        return error;
                   1404: }
                   1405:
                   1406: const int rump_vop_advlock_vp_offsets[] = {
                   1407:        VOPARG_OFFSETOF(struct rump_vop_advlock_args,a_vp),
                   1408:        VDESC_NO_OFFSET
                   1409: };
                   1410: const struct vnodeop_desc rump_vop_advlock_desc = {
                   1411:        RUMP_VOP_ADVLOCK_DESCOFFSET,
                   1412:        "rump_vop_advlock",
                   1413:        0,
                   1414:        rump_vop_advlock_vp_offsets,
                   1415:        VDESC_NO_OFFSET,
                   1416:        VDESC_NO_OFFSET,
                   1417:        VDESC_NO_OFFSET,
                   1418:        NULL,
                   1419: };
                   1420: int
                   1421: RUMP_VOP_ADVLOCK(struct vnode *vp,
                   1422:     void *id,
                   1423:     int op,
                   1424:     struct flock *fl,
                   1425:     int flags)
                   1426: {
                   1427:        int error;
                   1428:        bool mpsafe;
                   1429:        struct rump_vop_advlock_args a;
                   1430:        a.a_desc = VDESC(rump_vop_advlock);
                   1431:        a.a_vp = vp;
                   1432:        a.a_id = id;
                   1433:        a.a_op = op;
                   1434:        a.a_fl = fl;
                   1435:        a.a_flags = flags;
                   1436:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1437:        rump_schedule();
1.1.10.2  yamt     1438:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1439:        error = (VCALL(vp, VOFFSET(rump_vop_advlock), &a));
                   1440:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1441:        rump_unschedule();
1.1.10.2  yamt     1442:        return error;
                   1443: }
                   1444:
                   1445: const int rump_vop_whiteout_vp_offsets[] = {
                   1446:        VOPARG_OFFSETOF(struct rump_vop_whiteout_args,a_dvp),
                   1447:        VDESC_NO_OFFSET
                   1448: };
                   1449: const struct vnodeop_desc rump_vop_whiteout_desc = {
                   1450:        RUMP_VOP_WHITEOUT_DESCOFFSET,
                   1451:        "rump_vop_whiteout",
                   1452:        0,
                   1453:        rump_vop_whiteout_vp_offsets,
                   1454:        VDESC_NO_OFFSET,
                   1455:        VDESC_NO_OFFSET,
                   1456:        VOPARG_OFFSETOF(struct rump_vop_whiteout_args, a_cnp),
                   1457:        NULL,
                   1458: };
                   1459: int
                   1460: RUMP_VOP_WHITEOUT(struct vnode *dvp,
                   1461:     struct componentname *cnp,
                   1462:     int flags)
                   1463: {
                   1464:        int error;
                   1465:        bool mpsafe;
                   1466:        struct rump_vop_whiteout_args a;
                   1467:        a.a_desc = VDESC(rump_vop_whiteout);
                   1468:        a.a_dvp = dvp;
                   1469:        a.a_cnp = cnp;
                   1470:        a.a_flags = flags;
                   1471:        mpsafe = (dvp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1472:        rump_schedule();
1.1.10.2  yamt     1473:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1474:        error = (VCALL(dvp, VOFFSET(rump_vop_whiteout), &a));
                   1475:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1476:        rump_unschedule();
1.1.10.2  yamt     1477:        return error;
                   1478: }
                   1479:
                   1480: const int rump_vop_getpages_vp_offsets[] = {
                   1481:        VOPARG_OFFSETOF(struct rump_vop_getpages_args,a_vp),
                   1482:        VDESC_NO_OFFSET
                   1483: };
                   1484: const struct vnodeop_desc rump_vop_getpages_desc = {
                   1485:        RUMP_VOP_GETPAGES_DESCOFFSET,
                   1486:        "rump_vop_getpages",
                   1487:        0,
                   1488:        rump_vop_getpages_vp_offsets,
                   1489:        VDESC_NO_OFFSET,
                   1490:        VDESC_NO_OFFSET,
                   1491:        VDESC_NO_OFFSET,
                   1492:        NULL,
                   1493: };
                   1494: int
                   1495: RUMP_VOP_GETPAGES(struct vnode *vp,
                   1496:     off_t offset,
                   1497:     struct vm_page **m,
                   1498:     int *count,
                   1499:     int centeridx,
                   1500:     int access_type,
                   1501:     int advice,
                   1502:     int flags)
                   1503: {
                   1504:        int error;
                   1505:        bool mpsafe;
                   1506:        struct rump_vop_getpages_args a;
                   1507:        a.a_desc = VDESC(rump_vop_getpages);
                   1508:        a.a_vp = vp;
                   1509:        a.a_offset = offset;
                   1510:        a.a_m = m;
                   1511:        a.a_count = count;
                   1512:        a.a_centeridx = centeridx;
                   1513:        a.a_access_type = access_type;
                   1514:        a.a_advice = advice;
                   1515:        a.a_flags = flags;
                   1516:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1517:        rump_schedule();
1.1.10.2  yamt     1518:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1519:        error = (VCALL(vp, VOFFSET(rump_vop_getpages), &a));
                   1520:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1521:        rump_unschedule();
1.1.10.2  yamt     1522:        return error;
                   1523: }
                   1524:
                   1525: const int rump_vop_putpages_vp_offsets[] = {
                   1526:        VOPARG_OFFSETOF(struct rump_vop_putpages_args,a_vp),
                   1527:        VDESC_NO_OFFSET
                   1528: };
                   1529: const struct vnodeop_desc rump_vop_putpages_desc = {
                   1530:        RUMP_VOP_PUTPAGES_DESCOFFSET,
                   1531:        "rump_vop_putpages",
                   1532:        0,
                   1533:        rump_vop_putpages_vp_offsets,
                   1534:        VDESC_NO_OFFSET,
                   1535:        VDESC_NO_OFFSET,
                   1536:        VDESC_NO_OFFSET,
                   1537:        NULL,
                   1538: };
                   1539: int
                   1540: RUMP_VOP_PUTPAGES(struct vnode *vp,
                   1541:     off_t offlo,
                   1542:     off_t offhi,
                   1543:     int flags)
                   1544: {
                   1545:        int error;
                   1546:        bool mpsafe;
                   1547:        struct rump_vop_putpages_args a;
                   1548:        a.a_desc = VDESC(rump_vop_putpages);
                   1549:        a.a_vp = vp;
                   1550:        a.a_offlo = offlo;
                   1551:        a.a_offhi = offhi;
                   1552:        a.a_flags = flags;
                   1553:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1554:        rump_schedule();
1.1.10.2  yamt     1555:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1556:        error = (VCALL(vp, VOFFSET(rump_vop_putpages), &a));
                   1557:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1558:        rump_unschedule();
1.1.10.2  yamt     1559:        return error;
                   1560: }
                   1561:
                   1562: const int rump_vop_closeextattr_vp_offsets[] = {
                   1563:        VOPARG_OFFSETOF(struct rump_vop_closeextattr_args,a_vp),
                   1564:        VDESC_NO_OFFSET
                   1565: };
                   1566: const struct vnodeop_desc rump_vop_closeextattr_desc = {
                   1567:        RUMP_VOP_CLOSEEXTATTR_DESCOFFSET,
                   1568:        "rump_vop_closeextattr",
                   1569:        0,
                   1570:        rump_vop_closeextattr_vp_offsets,
                   1571:        VDESC_NO_OFFSET,
                   1572:        VOPARG_OFFSETOF(struct rump_vop_closeextattr_args, a_cred),
                   1573:        VDESC_NO_OFFSET,
                   1574:        NULL,
                   1575: };
                   1576: int
                   1577: RUMP_VOP_CLOSEEXTATTR(struct vnode *vp,
                   1578:     int commit,
                   1579:     kauth_cred_t cred)
                   1580: {
                   1581:        int error;
                   1582:        bool mpsafe;
                   1583:        struct rump_vop_closeextattr_args a;
                   1584:        a.a_desc = VDESC(rump_vop_closeextattr);
                   1585:        a.a_vp = vp;
                   1586:        a.a_commit = commit;
                   1587:        a.a_cred = cred;
                   1588:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1589:        rump_schedule();
1.1.10.2  yamt     1590:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1591:        error = (VCALL(vp, VOFFSET(rump_vop_closeextattr), &a));
                   1592:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1593:        rump_unschedule();
1.1.10.2  yamt     1594:        return error;
                   1595: }
                   1596:
                   1597: const int rump_vop_getextattr_vp_offsets[] = {
                   1598:        VOPARG_OFFSETOF(struct rump_vop_getextattr_args,a_vp),
                   1599:        VDESC_NO_OFFSET
                   1600: };
                   1601: const struct vnodeop_desc rump_vop_getextattr_desc = {
                   1602:        RUMP_VOP_GETEXTATTR_DESCOFFSET,
                   1603:        "rump_vop_getextattr",
                   1604:        0,
                   1605:        rump_vop_getextattr_vp_offsets,
                   1606:        VDESC_NO_OFFSET,
                   1607:        VOPARG_OFFSETOF(struct rump_vop_getextattr_args, a_cred),
                   1608:        VDESC_NO_OFFSET,
                   1609:        NULL,
                   1610: };
                   1611: int
                   1612: RUMP_VOP_GETEXTATTR(struct vnode *vp,
                   1613:     int attrnamespace,
                   1614:     const char *name,
                   1615:     struct uio *uio,
                   1616:     size_t *size,
                   1617:     kauth_cred_t cred)
                   1618: {
                   1619:        int error;
                   1620:        bool mpsafe;
                   1621:        struct rump_vop_getextattr_args a;
                   1622:        a.a_desc = VDESC(rump_vop_getextattr);
                   1623:        a.a_vp = vp;
                   1624:        a.a_attrnamespace = attrnamespace;
                   1625:        a.a_name = name;
                   1626:        a.a_uio = uio;
                   1627:        a.a_size = size;
                   1628:        a.a_cred = cred;
                   1629:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1630:        rump_schedule();
1.1.10.2  yamt     1631:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1632:        error = (VCALL(vp, VOFFSET(rump_vop_getextattr), &a));
                   1633:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1634:        rump_unschedule();
1.1.10.2  yamt     1635:        return error;
                   1636: }
                   1637:
                   1638: const int rump_vop_listextattr_vp_offsets[] = {
                   1639:        VOPARG_OFFSETOF(struct rump_vop_listextattr_args,a_vp),
                   1640:        VDESC_NO_OFFSET
                   1641: };
                   1642: const struct vnodeop_desc rump_vop_listextattr_desc = {
                   1643:        RUMP_VOP_LISTEXTATTR_DESCOFFSET,
                   1644:        "rump_vop_listextattr",
                   1645:        0,
                   1646:        rump_vop_listextattr_vp_offsets,
                   1647:        VDESC_NO_OFFSET,
                   1648:        VOPARG_OFFSETOF(struct rump_vop_listextattr_args, a_cred),
                   1649:        VDESC_NO_OFFSET,
                   1650:        NULL,
                   1651: };
                   1652: int
                   1653: RUMP_VOP_LISTEXTATTR(struct vnode *vp,
                   1654:     int attrnamespace,
                   1655:     struct uio *uio,
                   1656:     size_t *size,
                   1657:     kauth_cred_t cred)
                   1658: {
                   1659:        int error;
                   1660:        bool mpsafe;
                   1661:        struct rump_vop_listextattr_args a;
                   1662:        a.a_desc = VDESC(rump_vop_listextattr);
                   1663:        a.a_vp = vp;
                   1664:        a.a_attrnamespace = attrnamespace;
                   1665:        a.a_uio = uio;
                   1666:        a.a_size = size;
                   1667:        a.a_cred = cred;
                   1668:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1669:        rump_schedule();
1.1.10.2  yamt     1670:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1671:        error = (VCALL(vp, VOFFSET(rump_vop_listextattr), &a));
                   1672:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1673:        rump_unschedule();
1.1.10.2  yamt     1674:        return error;
                   1675: }
                   1676:
                   1677: const int rump_vop_openextattr_vp_offsets[] = {
                   1678:        VOPARG_OFFSETOF(struct rump_vop_openextattr_args,a_vp),
                   1679:        VDESC_NO_OFFSET
                   1680: };
                   1681: const struct vnodeop_desc rump_vop_openextattr_desc = {
                   1682:        RUMP_VOP_OPENEXTATTR_DESCOFFSET,
                   1683:        "rump_vop_openextattr",
                   1684:        0,
                   1685:        rump_vop_openextattr_vp_offsets,
                   1686:        VDESC_NO_OFFSET,
                   1687:        VOPARG_OFFSETOF(struct rump_vop_openextattr_args, a_cred),
                   1688:        VDESC_NO_OFFSET,
                   1689:        NULL,
                   1690: };
                   1691: int
                   1692: RUMP_VOP_OPENEXTATTR(struct vnode *vp,
                   1693:     kauth_cred_t cred)
                   1694: {
                   1695:        int error;
                   1696:        bool mpsafe;
                   1697:        struct rump_vop_openextattr_args a;
                   1698:        a.a_desc = VDESC(rump_vop_openextattr);
                   1699:        a.a_vp = vp;
                   1700:        a.a_cred = cred;
                   1701:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1702:        rump_schedule();
1.1.10.2  yamt     1703:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1704:        error = (VCALL(vp, VOFFSET(rump_vop_openextattr), &a));
                   1705:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1706:        rump_unschedule();
1.1.10.2  yamt     1707:        return error;
                   1708: }
                   1709:
                   1710: const int rump_vop_deleteextattr_vp_offsets[] = {
                   1711:        VOPARG_OFFSETOF(struct rump_vop_deleteextattr_args,a_vp),
                   1712:        VDESC_NO_OFFSET
                   1713: };
                   1714: const struct vnodeop_desc rump_vop_deleteextattr_desc = {
                   1715:        RUMP_VOP_DELETEEXTATTR_DESCOFFSET,
                   1716:        "rump_vop_deleteextattr",
                   1717:        0,
                   1718:        rump_vop_deleteextattr_vp_offsets,
                   1719:        VDESC_NO_OFFSET,
                   1720:        VOPARG_OFFSETOF(struct rump_vop_deleteextattr_args, a_cred),
                   1721:        VDESC_NO_OFFSET,
                   1722:        NULL,
                   1723: };
                   1724: int
                   1725: RUMP_VOP_DELETEEXTATTR(struct vnode *vp,
                   1726:     int attrnamespace,
                   1727:     const char *name,
                   1728:     kauth_cred_t cred)
                   1729: {
                   1730:        int error;
                   1731:        bool mpsafe;
                   1732:        struct rump_vop_deleteextattr_args a;
                   1733:        a.a_desc = VDESC(rump_vop_deleteextattr);
                   1734:        a.a_vp = vp;
                   1735:        a.a_attrnamespace = attrnamespace;
                   1736:        a.a_name = name;
                   1737:        a.a_cred = cred;
                   1738:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1739:        rump_schedule();
1.1.10.2  yamt     1740:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1741:        error = (VCALL(vp, VOFFSET(rump_vop_deleteextattr), &a));
                   1742:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1743:        rump_unschedule();
1.1.10.2  yamt     1744:        return error;
                   1745: }
                   1746:
                   1747: const int rump_vop_setextattr_vp_offsets[] = {
                   1748:        VOPARG_OFFSETOF(struct rump_vop_setextattr_args,a_vp),
                   1749:        VDESC_NO_OFFSET
                   1750: };
                   1751: const struct vnodeop_desc rump_vop_setextattr_desc = {
                   1752:        RUMP_VOP_SETEXTATTR_DESCOFFSET,
                   1753:        "rump_vop_setextattr",
                   1754:        0,
                   1755:        rump_vop_setextattr_vp_offsets,
                   1756:        VDESC_NO_OFFSET,
                   1757:        VOPARG_OFFSETOF(struct rump_vop_setextattr_args, a_cred),
                   1758:        VDESC_NO_OFFSET,
                   1759:        NULL,
                   1760: };
                   1761: int
                   1762: RUMP_VOP_SETEXTATTR(struct vnode *vp,
                   1763:     int attrnamespace,
                   1764:     const char *name,
                   1765:     struct uio *uio,
                   1766:     kauth_cred_t cred)
                   1767: {
                   1768:        int error;
                   1769:        bool mpsafe;
                   1770:        struct rump_vop_setextattr_args a;
                   1771:        a.a_desc = VDESC(rump_vop_setextattr);
                   1772:        a.a_vp = vp;
                   1773:        a.a_attrnamespace = attrnamespace;
                   1774:        a.a_name = name;
                   1775:        a.a_uio = uio;
                   1776:        a.a_cred = cred;
                   1777:        mpsafe = (vp->v_vflag & VV_MPSAFE);
1.1.10.3! yamt     1778:        rump_schedule();
1.1.10.2  yamt     1779:        if (!mpsafe) { KERNEL_LOCK(1, curlwp); }
                   1780:        error = (VCALL(vp, VOFFSET(rump_vop_setextattr), &a));
                   1781:        if (!mpsafe) { KERNEL_UNLOCK_ONE(curlwp); }
1.1.10.3! yamt     1782:        rump_unschedule();
1.1.10.2  yamt     1783:        return error;
                   1784: }
                   1785:
                   1786: /* End of special cases. */
                   1787:
                   1788: const struct vnodeop_desc * const rump_vfs_op_descs[] = {
                   1789:        &rump_vop_default_desc, /* MUST BE FIRST */
                   1790:        &rump_vop_bwrite_desc,  /* XXX: SPECIAL CASE */
                   1791:
                   1792:        &rump_vop_lookup_desc,
                   1793:        &rump_vop_create_desc,
                   1794:        &rump_vop_mknod_desc,
                   1795:        &rump_vop_open_desc,
                   1796:        &rump_vop_close_desc,
                   1797:        &rump_vop_access_desc,
                   1798:        &rump_vop_getattr_desc,
                   1799:        &rump_vop_setattr_desc,
                   1800:        &rump_vop_read_desc,
                   1801:        &rump_vop_write_desc,
                   1802:        &rump_vop_ioctl_desc,
                   1803:        &rump_vop_fcntl_desc,
                   1804:        &rump_vop_poll_desc,
                   1805:        &rump_vop_kqfilter_desc,
                   1806:        &rump_vop_revoke_desc,
                   1807:        &rump_vop_mmap_desc,
                   1808:        &rump_vop_fsync_desc,
                   1809:        &rump_vop_seek_desc,
                   1810:        &rump_vop_remove_desc,
                   1811:        &rump_vop_link_desc,
                   1812:        &rump_vop_rename_desc,
                   1813:        &rump_vop_mkdir_desc,
                   1814:        &rump_vop_rmdir_desc,
                   1815:        &rump_vop_symlink_desc,
                   1816:        &rump_vop_readdir_desc,
                   1817:        &rump_vop_readlink_desc,
                   1818:        &rump_vop_abortop_desc,
                   1819:        &rump_vop_inactive_desc,
                   1820:        &rump_vop_reclaim_desc,
                   1821:        &rump_vop_lock_desc,
                   1822:        &rump_vop_unlock_desc,
                   1823:        &rump_vop_bmap_desc,
                   1824:        &rump_vop_strategy_desc,
                   1825:        &rump_vop_print_desc,
                   1826:        &rump_vop_islocked_desc,
                   1827:        &rump_vop_pathconf_desc,
                   1828:        &rump_vop_advlock_desc,
                   1829:        &rump_vop_whiteout_desc,
                   1830:        &rump_vop_getpages_desc,
                   1831:        &rump_vop_putpages_desc,
                   1832:        &rump_vop_closeextattr_desc,
                   1833:        &rump_vop_getextattr_desc,
                   1834:        &rump_vop_listextattr_desc,
                   1835:        &rump_vop_openextattr_desc,
                   1836:        &rump_vop_deleteextattr_desc,
                   1837:        &rump_vop_setextattr_desc,
                   1838:        NULL
                   1839: };
                   1840:

CVSweb <webmaster@jp.NetBSD.org>