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