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