|
|
1.1 ! root 1: # ! 2: # Copyright (c) 1995, 1997-1998 Apple Computer, Inc. All Rights Reserved. ! 3: # Copyright (c) 1992, 1993 ! 4: # The Regents of the University of California. All rights reserved. ! 5: # ! 6: # Redistribution and use in source and binary forms, with or without ! 7: # modification, are permitted provided that the following conditions ! 8: # are met: ! 9: # 1. Redistributions of source code must retain the above copyright ! 10: # notice, this list of conditions and the following disclaimer. ! 11: # 2. Redistributions in binary form must reproduce the above copyright ! 12: # notice, this list of conditions and the following disclaimer in the ! 13: # documentation and/or other materials provided with the distribution. ! 14: # 3. All advertising materials mentioning features or use of this software ! 15: # must display the following acknowledgement: ! 16: # This product includes software developed by the University of ! 17: # California, Berkeley and its contributors. ! 18: # 4. Neither the name of the University nor the names of its contributors ! 19: # may be used to endorse or promote products derived from this software ! 20: # without specific prior written permission. ! 21: # ! 22: # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 23: # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 24: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 25: # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 26: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 27: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 28: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 29: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 30: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 31: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 32: # SUCH DAMAGE. ! 33: # ! 34: # @(#)vnode_if.src 8.12 (Berkeley) 5/14/95 ! 35: # ! 36: ! 37: # ! 38: # Above each of the vop descriptors is a specification of the locking ! 39: # protocol used by each vop call. The first column is the name of ! 40: # the variable, the remaining three columns are in, out and error ! 41: # respectively. The "in" column defines the lock state on input, ! 42: # the "out" column defines the state on succesful return, and the ! 43: # "error" column defines the locking state on error exit. ! 44: # ! 45: # The locking value can take the following values: ! 46: # L: locked. ! 47: # U: unlocked/ ! 48: # -: not applicable. vnode does not yet (or no longer) exists. ! 49: # =: the same on input and output, may be either L or U. ! 50: # X: locked if not nil. ! 51: # ! 52: ! 53: # ! 54: #% lookup dvp L ? ? ! 55: #% lookup vpp - L - ! 56: # ! 57: # XXX - the lookup locking protocol defies simple description and depends ! 58: # on the flags and operation fields in the (cnp) structure. Note ! 59: # especially that *vpp may equal dvp and both may be locked. ! 60: # ! 61: vop_lookup { ! 62: IN struct vnode *dvp; ! 63: INOUT struct vnode **vpp; ! 64: IN struct componentname *cnp; ! 65: }; ! 66: ! 67: # ! 68: #% create dvp L U U ! 69: #% create vpp - L - ! 70: # ! 71: vop_create { ! 72: IN WILLRELE struct vnode *dvp; ! 73: OUT struct vnode **vpp; ! 74: IN struct componentname *cnp; ! 75: IN struct vattr *vap; ! 76: }; ! 77: ! 78: # ! 79: #% whiteout dvp L L L ! 80: #% whiteout cnp - - - ! 81: #% whiteout flag - - - ! 82: # ! 83: vop_whiteout { ! 84: IN WILLRELE struct vnode *dvp; ! 85: IN struct componentname *cnp; ! 86: IN int flags; ! 87: }; ! 88: ! 89: # ! 90: #% mknod dvp L U U ! 91: #% mknod vpp - X - ! 92: # ! 93: vop_mknod { ! 94: IN WILLRELE struct vnode *dvp; ! 95: OUT WILLRELE struct vnode **vpp; ! 96: IN struct componentname *cnp; ! 97: IN struct vattr *vap; ! 98: }; ! 99: ! 100: # ! 101: #% mkcomplex dvp L U U ! 102: #% mkcomplex vpp - X - ! 103: # ! 104: vop_mkcomplex { ! 105: IN WILLRELE struct vnode *dvp; ! 106: OUT WILLRELE struct vnode **vpp; ! 107: IN struct componentname *cnp; ! 108: IN struct vattr *vap; ! 109: IN u_long type; ! 110: }; ! 111: ! 112: # ! 113: #% open vp L L L ! 114: # ! 115: vop_open { ! 116: IN struct vnode *vp; ! 117: IN int mode; ! 118: IN struct ucred *cred; ! 119: IN struct proc *p; ! 120: }; ! 121: ! 122: # ! 123: #% close vp U U U ! 124: # ! 125: vop_close { ! 126: IN struct vnode *vp; ! 127: IN int fflag; ! 128: IN struct ucred *cred; ! 129: IN struct proc *p; ! 130: }; ! 131: ! 132: # ! 133: #% access vp L L L ! 134: # ! 135: vop_access { ! 136: IN struct vnode *vp; ! 137: IN int mode; ! 138: IN struct ucred *cred; ! 139: IN struct proc *p; ! 140: }; ! 141: ! 142: # ! 143: #% getattr vp = = = ! 144: # ! 145: vop_getattr { ! 146: IN struct vnode *vp; ! 147: IN struct vattr *vap; ! 148: IN struct ucred *cred; ! 149: IN struct proc *p; ! 150: }; ! 151: ! 152: # ! 153: #% setattr vp L L L ! 154: # ! 155: vop_setattr { ! 156: IN struct vnode *vp; ! 157: IN struct vattr *vap; ! 158: IN struct ucred *cred; ! 159: IN struct proc *p; ! 160: }; ! 161: ! 162: # ! 163: #% getattrlist vp = = = ! 164: # ! 165: vop_getattrlist { ! 166: IN struct vnode *vp; ! 167: IN struct attrlist *alist; ! 168: INOUT struct uio *uio; ! 169: IN struct ucred *cred; ! 170: IN struct proc *p; ! 171: }; ! 172: ! 173: # ! 174: #% setattrlist vp L L L ! 175: # ! 176: vop_setattrlist { ! 177: IN struct vnode *vp; ! 178: IN struct attrlist *alist; ! 179: INOUT struct uio *uio; ! 180: IN struct ucred *cred; ! 181: IN struct proc *p; ! 182: }; ! 183: ! 184: # ! 185: #% read vp L L L ! 186: # ! 187: vop_read { ! 188: IN struct vnode *vp; ! 189: INOUT struct uio *uio; ! 190: IN int ioflag; ! 191: IN struct ucred *cred; ! 192: }; ! 193: ! 194: # ! 195: #% write vp L L L ! 196: # ! 197: vop_write { ! 198: IN struct vnode *vp; ! 199: INOUT struct uio *uio; ! 200: IN int ioflag; ! 201: IN struct ucred *cred; ! 202: }; ! 203: ! 204: # ! 205: #% lease vp = = = ! 206: # ! 207: vop_lease { ! 208: IN struct vnode *vp; ! 209: IN struct proc *p; ! 210: IN struct ucred *cred; ! 211: IN int flag; ! 212: }; ! 213: ! 214: # ! 215: #% ioctl vp U U U ! 216: # ! 217: vop_ioctl { ! 218: IN struct vnode *vp; ! 219: IN u_long command; ! 220: IN caddr_t data; ! 221: IN int fflag; ! 222: IN struct ucred *cred; ! 223: IN struct proc *p; ! 224: }; ! 225: ! 226: # ! 227: #% select vp U U U ! 228: # ! 229: # Needs work? (fflags) ! 230: # ! 231: vop_select { ! 232: IN struct vnode *vp; ! 233: IN int which; ! 234: IN int fflags; ! 235: IN struct ucred *cred; ! 236: IN struct proc *p; ! 237: }; ! 238: ! 239: # ! 240: #% exchange fvp L L L ! 241: #% exchange tvp L L L ! 242: # ! 243: vop_exchange { ! 244: IN struct vnode *fvp; ! 245: IN struct vnode *tvp; ! 246: IN struct ucred *cred; ! 247: IN struct proc *p; ! 248: }; ! 249: ! 250: # ! 251: #% revoke vp U U U ! 252: # ! 253: vop_revoke { ! 254: IN struct vnode *vp; ! 255: IN int flags; ! 256: }; ! 257: ! 258: # ! 259: # XXX - not used ! 260: # ! 261: vop_mmap { ! 262: IN struct vnode *vp; ! 263: IN int fflags; ! 264: IN struct ucred *cred; ! 265: IN struct proc *p; ! 266: }; ! 267: ! 268: # ! 269: #% fsync vp L L L ! 270: # ! 271: vop_fsync { ! 272: IN struct vnode *vp; ! 273: IN struct ucred *cred; ! 274: IN int waitfor; ! 275: IN struct proc *p; ! 276: }; ! 277: ! 278: # ! 279: # XXX - not used ! 280: # Needs work: Is newoff right? What's it mean? ! 281: # ! 282: vop_seek { ! 283: IN struct vnode *vp; ! 284: IN off_t oldoff; ! 285: IN off_t newoff; ! 286: IN struct ucred *cred; ! 287: }; ! 288: ! 289: # ! 290: #% remove dvp L U U ! 291: #% remove vp L U U ! 292: # ! 293: vop_remove { ! 294: IN WILLRELE struct vnode *dvp; ! 295: IN WILLRELE struct vnode *vp; ! 296: IN struct componentname *cnp; ! 297: }; ! 298: ! 299: # ! 300: #% link vp U U U ! 301: #% link tdvp L U U ! 302: # ! 303: vop_link { ! 304: IN WILLRELE struct vnode *vp; ! 305: IN struct vnode *tdvp; ! 306: IN struct componentname *cnp; ! 307: }; ! 308: ! 309: # ! 310: #% rename fdvp U U U ! 311: #% rename fvp U U U ! 312: #% rename tdvp L U U ! 313: #% rename tvp X U U ! 314: # ! 315: vop_rename { ! 316: IN WILLRELE struct vnode *fdvp; ! 317: IN WILLRELE struct vnode *fvp; ! 318: IN struct componentname *fcnp; ! 319: IN WILLRELE struct vnode *tdvp; ! 320: IN WILLRELE struct vnode *tvp; ! 321: IN struct componentname *tcnp; ! 322: }; ! 323: ! 324: # ! 325: #% mkdir dvp L U U ! 326: #% mkdir vpp - L - ! 327: # ! 328: vop_mkdir { ! 329: IN WILLRELE struct vnode *dvp; ! 330: OUT struct vnode **vpp; ! 331: IN struct componentname *cnp; ! 332: IN struct vattr *vap; ! 333: }; ! 334: ! 335: # ! 336: #% rmdir dvp L U U ! 337: #% rmdir vp L U U ! 338: # ! 339: vop_rmdir { ! 340: IN WILLRELE struct vnode *dvp; ! 341: IN WILLRELE struct vnode *vp; ! 342: IN struct componentname *cnp; ! 343: }; ! 344: ! 345: # ! 346: #% symlink dvp L U U ! 347: #% symlink vpp - U - ! 348: # ! 349: # XXX - note that the return vnode has already been VRELE'ed ! 350: # by the filesystem layer. To use it you must use vget, ! 351: # possibly with a further namei. ! 352: # ! 353: vop_symlink { ! 354: IN WILLRELE struct vnode *dvp; ! 355: OUT WILLRELE struct vnode **vpp; ! 356: IN struct componentname *cnp; ! 357: IN struct vattr *vap; ! 358: IN char *target; ! 359: }; ! 360: ! 361: # ! 362: #% readdir vp L L L ! 363: # ! 364: vop_readdir { ! 365: IN struct vnode *vp; ! 366: INOUT struct uio *uio; ! 367: IN struct ucred *cred; ! 368: INOUT int *eofflag; ! 369: OUT int *ncookies; ! 370: INOUT u_long **cookies; ! 371: }; ! 372: ! 373: # ! 374: #% readdirattr vp L L L ! 375: # ! 376: vop_readdirattr { ! 377: IN struct vnode *vp; ! 378: IN struct attrlist *alist; ! 379: INOUT struct uio *uio; ! 380: INOUT int index; ! 381: INOUT int *eofflag; ! 382: OUT u_long *ncookies; ! 383: INOUT u_long **cookies; ! 384: IN struct ucred *cred; ! 385: }; ! 386: ! 387: # ! 388: #% readlink vp L L L ! 389: # ! 390: vop_readlink { ! 391: IN struct vnode *vp; ! 392: INOUT struct uio *uio; ! 393: IN struct ucred *cred; ! 394: }; ! 395: ! 396: # ! 397: #% abortop dvp = = = ! 398: # ! 399: vop_abortop { ! 400: IN struct vnode *dvp; ! 401: IN struct componentname *cnp; ! 402: }; ! 403: ! 404: # ! 405: #% inactive vp L U U ! 406: # ! 407: vop_inactive { ! 408: IN struct vnode *vp; ! 409: IN struct proc *p; ! 410: }; ! 411: ! 412: # ! 413: #% reclaim vp U U U ! 414: # ! 415: vop_reclaim { ! 416: IN struct vnode *vp; ! 417: IN struct proc *p; ! 418: }; ! 419: ! 420: # ! 421: #% lock vp U L U ! 422: # ! 423: vop_lock { ! 424: IN struct vnode *vp; ! 425: IN int flags; ! 426: IN struct proc *p; ! 427: }; ! 428: ! 429: # ! 430: #% unlock vp L U L ! 431: # ! 432: vop_unlock { ! 433: IN struct vnode *vp; ! 434: IN int flags; ! 435: IN struct proc *p; ! 436: }; ! 437: ! 438: # ! 439: #% bmap vp L L L ! 440: #% bmap vpp - U - ! 441: # ! 442: vop_bmap { ! 443: IN struct vnode *vp; ! 444: IN daddr_t bn; ! 445: OUT struct vnode **vpp; ! 446: IN daddr_t *bnp; ! 447: OUT int *runp; ! 448: }; ! 449: ! 450: # ! 451: # Needs work: no vp? ! 452: # ! 453: #vop_strategy { ! 454: # IN struct buf *bp; ! 455: #}; ! 456: ! 457: # ! 458: #% print vp = = = ! 459: # ! 460: vop_print { ! 461: IN struct vnode *vp; ! 462: }; ! 463: ! 464: # ! 465: #% islocked vp = = = ! 466: # ! 467: vop_islocked { ! 468: IN struct vnode *vp; ! 469: }; ! 470: ! 471: # ! 472: #% pathconf vp L L L ! 473: # ! 474: vop_pathconf { ! 475: IN struct vnode *vp; ! 476: IN int name; ! 477: OUT register_t *retval; ! 478: }; ! 479: ! 480: # ! 481: #% advlock vp U U U ! 482: # ! 483: vop_advlock { ! 484: IN struct vnode *vp; ! 485: IN caddr_t id; ! 486: IN int op; ! 487: IN struct flock *fl; ! 488: IN int flags; ! 489: }; ! 490: ! 491: # ! 492: #% blkatoff vp L L L ! 493: # ! 494: vop_blkatoff { ! 495: IN struct vnode *vp; ! 496: IN off_t offset; ! 497: OUT char **res; ! 498: OUT struct buf **bpp; ! 499: }; ! 500: ! 501: # ! 502: #% valloc pvp L L L ! 503: # ! 504: vop_valloc { ! 505: IN struct vnode *pvp; ! 506: IN int mode; ! 507: IN struct ucred *cred; ! 508: OUT struct vnode **vpp; ! 509: }; ! 510: ! 511: # ! 512: #% reallocblks vp L L L ! 513: # ! 514: vop_reallocblks { ! 515: IN struct vnode *vp; ! 516: IN struct cluster_save *buflist; ! 517: }; ! 518: ! 519: # ! 520: #% vfree pvp L L L ! 521: # ! 522: vop_vfree { ! 523: IN struct vnode *pvp; ! 524: IN ino_t ino; ! 525: IN int mode; ! 526: }; ! 527: ! 528: # ! 529: #% truncate vp L L L ! 530: # ! 531: vop_truncate { ! 532: IN struct vnode *vp; ! 533: IN off_t length; ! 534: IN int flags; ! 535: IN struct ucred *cred; ! 536: IN struct proc *p; ! 537: }; ! 538: ! 539: # ! 540: #% allocate vp L L L ! 541: # ! 542: vop_allocate { ! 543: IN struct vnode *vp; ! 544: IN off_t length; ! 545: IN u_int32_t flags; ! 546: OUT off_t *bytesallocated; ! 547: IN struct ucred *cred; ! 548: IN struct proc *p; ! 549: }; ! 550: ! 551: # ! 552: #% update vp L L L ! 553: # ! 554: vop_update { ! 555: IN struct vnode *vp; ! 556: IN struct timeval *access; ! 557: IN struct timeval *modify; ! 558: IN int waitfor; ! 559: }; ! 560: ! 561: # ! 562: #% pgrd vp L L L ! 563: # ! 564: vop_pgrd { ! 565: IN struct vnode *vp; ! 566: INOUT struct uio *uio; ! 567: IN struct ucred *cred; ! 568: }; ! 569: ! 570: # ! 571: #% pgwr vp L L L ! 572: # ! 573: vop_pgwr { ! 574: IN struct vnode *vp; ! 575: INOUT struct uio *uio; ! 576: IN struct ucred *cred; ! 577: IN vm_offset_t offset; ! 578: }; ! 579: ! 580: # ! 581: # Needs work: no vp? ! 582: # ! 583: #vop_bwrite { ! 584: # IN struct buf *bp; ! 585: #}; ! 586: ! 587: # ! 588: #% pagein vp L L L ! 589: # ! 590: vop_pagein { ! 591: IN struct vnode *vp; ! 592: INOUT struct uio *uio; ! 593: IN int ioflag; ! 594: IN struct ucred *cred; ! 595: }; ! 596: ! 597: # ! 598: #% pageout vp L L L ! 599: # ! 600: vop_pageout { ! 601: IN struct vnode *vp; ! 602: INOUT struct uio *uio; ! 603: IN int ioflag; ! 604: IN struct ucred *cred; ! 605: }; ! 606: ! 607: # ! 608: #% devblocksize vp = = = ! 609: # ! 610: vop_devblocksize { ! 611: IN struct vnode *vp; ! 612: OUT register_t *retval; ! 613: }; ! 614: ! 615: # ! 616: #% searchfs vp L L L ! 617: # ! 618: ! 619: vop_searchfs { ! 620: IN struct vnode *vp; ! 621: IN void *searchparams1; ! 622: IN void *searchparams2; ! 623: IN struct attrlist *searchattrs; ! 624: IN u_long maxmatches; ! 625: IN struct timeval *timelimit; ! 626: OUT struct attrlist *returnattrs; ! 627: OUT u_long *nummatches; ! 628: IN u_long scriptcode; ! 629: IN u_long options; ! 630: INOUT struct uio *uio; ! 631: INOUT struct searchstate *searchstate; ! 632: }; ! 633:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.