|
|
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: # ebly 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: #% cachedlookup dvp L ? ? ! 69: #% cachedlookup vpp - L - ! 70: # ! 71: # This must be an exact copy of lookup. See kern/vfs_cache.c for details. ! 72: # ! 73: vop_cachedlookup { ! 74: IN struct vnode *dvp; ! 75: INOUT struct vnode **vpp; ! 76: IN struct componentname *cnp; ! 77: }; ! 78: ! 79: # ! 80: #% create dvp L L L ! 81: #% create vpp - L - ! 82: # ! 83: vop_create { ! 84: IN WILLRELE struct vnode *dvp; ! 85: OUT struct vnode **vpp; ! 86: IN struct componentname *cnp; ! 87: IN struct vattr *vap; ! 88: }; ! 89: ! 90: # ! 91: #% whiteout dvp L L L ! 92: #% whiteout cnp - - - ! 93: #% whiteout flag - - - ! 94: # ! 95: vop_whiteout { ! 96: IN WILLRELE struct vnode *dvp; ! 97: IN struct componentname *cnp; ! 98: IN int flags; ! 99: }; ! 100: ! 101: # ! 102: #% mknod dvp L U U ! 103: #% mknod vpp - X - ! 104: # ! 105: vop_mknod { ! 106: IN WILLRELE struct vnode *dvp; ! 107: OUT WILLRELE struct vnode **vpp; ! 108: IN struct componentname *cnp; ! 109: IN struct vattr *vap; ! 110: }; ! 111: ! 112: # ! 113: #% mkcomplex dvp L U U ! 114: #% mkcomplex vpp - X - ! 115: # ! 116: vop_mkcomplex { ! 117: IN WILLRELE struct vnode *dvp; ! 118: OUT WILLRELE struct vnode **vpp; ! 119: IN struct componentname *cnp; ! 120: IN struct vattr *vap; ! 121: IN u_long type; ! 122: }; ! 123: ! 124: # ! 125: #% open vp L L L ! 126: # ! 127: vop_open { ! 128: IN struct vnode *vp; ! 129: IN int mode; ! 130: IN struct ucred *cred; ! 131: IN struct proc *p; ! 132: }; ! 133: ! 134: # ! 135: #% close vp U U U ! 136: # ! 137: vop_close { ! 138: IN struct vnode *vp; ! 139: IN int fflag; ! 140: IN struct ucred *cred; ! 141: IN struct proc *p; ! 142: }; ! 143: ! 144: # ! 145: #% access vp L L L ! 146: # ! 147: vop_access { ! 148: IN struct vnode *vp; ! 149: IN int mode; ! 150: IN struct ucred *cred; ! 151: IN struct proc *p; ! 152: }; ! 153: ! 154: # ! 155: #% getattr vp = = = ! 156: # ! 157: vop_getattr { ! 158: IN struct vnode *vp; ! 159: IN struct vattr *vap; ! 160: IN struct ucred *cred; ! 161: IN struct proc *p; ! 162: }; ! 163: ! 164: # ! 165: #% setattr vp L L L ! 166: # ! 167: vop_setattr { ! 168: IN struct vnode *vp; ! 169: IN struct vattr *vap; ! 170: IN struct ucred *cred; ! 171: IN struct proc *p; ! 172: }; ! 173: ! 174: # ! 175: #% getattrlist vp = = = ! 176: # ! 177: vop_getattrlist { ! 178: IN struct vnode *vp; ! 179: IN struct attrlist *alist; ! 180: INOUT struct uio *uio; ! 181: IN struct ucred *cred; ! 182: IN struct proc *p; ! 183: }; ! 184: ! 185: # ! 186: #% setattrlist vp L L L ! 187: # ! 188: vop_setattrlist { ! 189: IN struct vnode *vp; ! 190: IN struct attrlist *alist; ! 191: INOUT struct uio *uio; ! 192: IN struct ucred *cred; ! 193: IN struct proc *p; ! 194: }; ! 195: ! 196: # ! 197: #% read vp L L L ! 198: # ! 199: vop_read { ! 200: IN struct vnode *vp; ! 201: INOUT struct uio *uio; ! 202: IN int ioflag; ! 203: IN struct ucred *cred; ! 204: }; ! 205: ! 206: # ! 207: #% write vp L L L ! 208: # ! 209: vop_write { ! 210: IN struct vnode *vp; ! 211: INOUT struct uio *uio; ! 212: IN int ioflag; ! 213: IN struct ucred *cred; ! 214: }; ! 215: ! 216: # ! 217: #% lease vp = = = ! 218: # ! 219: vop_lease { ! 220: IN struct vnode *vp; ! 221: IN struct proc *p; ! 222: IN struct ucred *cred; ! 223: IN int flag; ! 224: }; ! 225: ! 226: # ! 227: #% ioctl vp U U U ! 228: # ! 229: vop_ioctl { ! 230: IN struct vnode *vp; ! 231: IN u_long command; ! 232: IN caddr_t data; ! 233: IN int fflag; ! 234: IN struct ucred *cred; ! 235: IN struct proc *p; ! 236: }; ! 237: ! 238: # ! 239: #% select vp U U U ! 240: # ! 241: # Needs work? (fflags) ! 242: # ! 243: vop_select { ! 244: IN struct vnode *vp; ! 245: IN int which; ! 246: IN int fflags; ! 247: IN struct ucred *cred; ! 248: IN struct proc *p; ! 249: }; ! 250: ! 251: # ! 252: #% exchange fvp L L L ! 253: #% exchange tvp L L L ! 254: # ! 255: vop_exchange { ! 256: IN struct vnode *fvp; ! 257: IN struct vnode *tvp; ! 258: IN struct ucred *cred; ! 259: IN struct proc *p; ! 260: }; ! 261: ! 262: # ! 263: #% revoke vp U U U ! 264: # ! 265: vop_revoke { ! 266: IN struct vnode *vp; ! 267: IN int flags; ! 268: }; ! 269: ! 270: # ! 271: # XXX - not used ! 272: # ! 273: vop_mmap { ! 274: IN struct vnode *vp; ! 275: IN int fflags; ! 276: IN struct ucred *cred; ! 277: IN struct proc *p; ! 278: }; ! 279: ! 280: # ! 281: #% fsync vp L L L ! 282: # ! 283: vop_fsync { ! 284: IN struct vnode *vp; ! 285: IN struct ucred *cred; ! 286: IN int waitfor; ! 287: IN struct proc *p; ! 288: }; ! 289: ! 290: # ! 291: # XXX - not used ! 292: # Needs work: Is newoff right? What's it mean? ! 293: # ! 294: vop_seek { ! 295: IN struct vnode *vp; ! 296: IN off_t oldoff; ! 297: IN off_t newoff; ! 298: IN struct ucred *cred; ! 299: }; ! 300: ! 301: # ! 302: #% remove dvp L U U ! 303: #% remove vp L U U ! 304: # ! 305: vop_remove { ! 306: IN WILLRELE struct vnode *dvp; ! 307: IN WILLRELE struct vnode *vp; ! 308: IN struct componentname *cnp; ! 309: }; ! 310: ! 311: # ! 312: #% link vp U U U ! 313: #% link tdvp L U U ! 314: # ! 315: vop_link { ! 316: IN WILLRELE struct vnode *vp; ! 317: IN struct vnode *tdvp; ! 318: IN struct componentname *cnp; ! 319: }; ! 320: ! 321: # ! 322: #% rename fdvp U U U ! 323: #% rename fvp U U U ! 324: #% rename tdvp L U U ! 325: #% rename tvp X U U ! 326: # ! 327: vop_rename { ! 328: IN WILLRELE struct vnode *fdvp; ! 329: IN WILLRELE struct vnode *fvp; ! 330: IN struct componentname *fcnp; ! 331: IN WILLRELE struct vnode *tdvp; ! 332: IN WILLRELE struct vnode *tvp; ! 333: IN struct componentname *tcnp; ! 334: }; ! 335: ! 336: # ! 337: #% mkdir dvp L U U ! 338: #% mkdir vpp - L - ! 339: # ! 340: vop_mkdir { ! 341: IN WILLRELE struct vnode *dvp; ! 342: OUT struct vnode **vpp; ! 343: IN struct componentname *cnp; ! 344: IN struct vattr *vap; ! 345: }; ! 346: ! 347: # ! 348: #% rmdir dvp L U U ! 349: #% rmdir vp L U U ! 350: # ! 351: vop_rmdir { ! 352: IN WILLRELE struct vnode *dvp; ! 353: IN WILLRELE struct vnode *vp; ! 354: IN struct componentname *cnp; ! 355: }; ! 356: ! 357: # ! 358: #% symlink dvp L U U ! 359: #% symlink vpp - U - ! 360: # ! 361: # XXX - note that the return vnode has already been VRELE'ed ! 362: # by the filesystem layer. To use it you must use vget, ! 363: # possibly with a further namei. ! 364: # ! 365: vop_symlink { ! 366: IN WILLRELE struct vnode *dvp; ! 367: OUT WILLRELE struct vnode **vpp; ! 368: IN struct componentname *cnp; ! 369: IN struct vattr *vap; ! 370: IN char *target; ! 371: }; ! 372: ! 373: # ! 374: #% readdir vp L L L ! 375: # ! 376: vop_readdir { ! 377: IN struct vnode *vp; ! 378: INOUT struct uio *uio; ! 379: IN struct ucred *cred; ! 380: INOUT int *eofflag; ! 381: OUT int *ncookies; ! 382: INOUT u_long **cookies; ! 383: }; ! 384: ! 385: # ! 386: #% readdirattr vp L L L ! 387: # ! 388: vop_readdirattr { ! 389: IN struct vnode *vp; ! 390: IN struct attrlist *alist; ! 391: INOUT struct uio *uio; ! 392: IN u_long maxcount; ! 393: IN u_long options; ! 394: OUT u_long *newstate; ! 395: OUT int *eofflag; ! 396: OUT u_long *actualcount; ! 397: OUT u_long **cookies; ! 398: IN struct ucred *cred; ! 399: }; ! 400: ! 401: # ! 402: #% readlink vp L L L ! 403: # ! 404: vop_readlink { ! 405: IN struct vnode *vp; ! 406: INOUT struct uio *uio; ! 407: IN struct ucred *cred; ! 408: }; ! 409: ! 410: # ! 411: #% abortop dvp = = = ! 412: # ! 413: vop_abortop { ! 414: IN struct vnode *dvp; ! 415: IN struct componentname *cnp; ! 416: }; ! 417: ! 418: # ! 419: #% inactive vp L U U ! 420: # ! 421: vop_inactive { ! 422: IN struct vnode *vp; ! 423: IN struct proc *p; ! 424: }; ! 425: ! 426: # ! 427: #% reclaim vp U U U ! 428: # ! 429: vop_reclaim { ! 430: IN struct vnode *vp; ! 431: IN struct proc *p; ! 432: }; ! 433: ! 434: # ! 435: #% lock vp U L U ! 436: # ! 437: vop_lock { ! 438: IN struct vnode *vp; ! 439: IN int flags; ! 440: IN struct proc *p; ! 441: }; ! 442: ! 443: # ! 444: #% unlock vp L U L ! 445: # ! 446: vop_unlock { ! 447: IN struct vnode *vp; ! 448: IN int flags; ! 449: IN struct proc *p; ! 450: }; ! 451: ! 452: # ! 453: #% bmap vp L L L ! 454: #% bmap vpp - U - ! 455: # ! 456: vop_bmap { ! 457: IN struct vnode *vp; ! 458: IN daddr_t bn; ! 459: OUT struct vnode **vpp; ! 460: IN daddr_t *bnp; ! 461: OUT int *runp; ! 462: }; ! 463: ! 464: # ! 465: # Needs work: no vp? ! 466: # ! 467: #vop_strategy { ! 468: # IN struct buf *bp; ! 469: #}; ! 470: ! 471: # ! 472: #% print vp = = = ! 473: # ! 474: vop_print { ! 475: IN struct vnode *vp; ! 476: }; ! 477: ! 478: # ! 479: #% islocked vp = = = ! 480: # ! 481: vop_islocked { ! 482: IN struct vnode *vp; ! 483: }; ! 484: ! 485: # ! 486: #% pathconf vp L L L ! 487: # ! 488: vop_pathconf { ! 489: IN struct vnode *vp; ! 490: IN int name; ! 491: OUT register_t *retval; ! 492: }; ! 493: ! 494: # ! 495: #% advlock vp U U U ! 496: # ! 497: vop_advlock { ! 498: IN struct vnode *vp; ! 499: IN caddr_t id; ! 500: IN int op; ! 501: IN struct flock *fl; ! 502: IN int flags; ! 503: }; ! 504: ! 505: # ! 506: #% blkatoff vp L L L ! 507: # ! 508: vop_blkatoff { ! 509: IN struct vnode *vp; ! 510: IN off_t offset; ! 511: OUT char **res; ! 512: OUT struct buf **bpp; ! 513: }; ! 514: ! 515: # ! 516: #% valloc pvp L L L ! 517: # ! 518: vop_valloc { ! 519: IN struct vnode *pvp; ! 520: IN int mode; ! 521: IN struct ucred *cred; ! 522: OUT struct vnode **vpp; ! 523: }; ! 524: ! 525: # ! 526: #% reallocblks vp L L L ! 527: # ! 528: vop_reallocblks { ! 529: IN struct vnode *vp; ! 530: IN struct cluster_save *buflist; ! 531: }; ! 532: ! 533: # ! 534: #% vfree pvp L L L ! 535: # ! 536: vop_vfree { ! 537: IN struct vnode *pvp; ! 538: IN ino_t ino; ! 539: IN int mode; ! 540: }; ! 541: ! 542: # ! 543: #% truncate vp L L L ! 544: # ! 545: vop_truncate { ! 546: IN struct vnode *vp; ! 547: IN off_t length; ! 548: IN int flags; ! 549: IN struct ucred *cred; ! 550: IN struct proc *p; ! 551: }; ! 552: ! 553: # ! 554: #% allocate vp L L L ! 555: # ! 556: vop_allocate { ! 557: IN struct vnode *vp; ! 558: IN off_t length; ! 559: IN u_int32_t flags; ! 560: OUT off_t *bytesallocated; ! 561: IN struct ucred *cred; ! 562: IN struct proc *p; ! 563: }; ! 564: ! 565: # ! 566: #% update vp L L L ! 567: # ! 568: vop_update { ! 569: IN struct vnode *vp; ! 570: IN struct timeval *access; ! 571: IN struct timeval *modify; ! 572: IN int waitfor; ! 573: }; ! 574: ! 575: # ! 576: #% pgrd vp L L L ! 577: # ! 578: vop_pgrd { ! 579: IN struct vnode *vp; ! 580: INOUT struct uio *uio; ! 581: IN struct ucred *cred; ! 582: }; ! 583: ! 584: # ! 585: #% pgwr vp L L L ! 586: # ! 587: vop_pgwr { ! 588: IN struct vnode *vp; ! 589: INOUT struct uio *uio; ! 590: IN struct ucred *cred; ! 591: IN vm_offset_t offset; ! 592: }; ! 593: ! 594: # ! 595: # Needs work: no vp? ! 596: # ! 597: #vop_bwrite { ! 598: # IN struct buf *bp; ! 599: #}; ! 600: ! 601: # ! 602: #% pagein vp L L L ! 603: # ! 604: vop_pagein { ! 605: IN struct vnode *vp; ! 606: INOUT struct uio *uio; ! 607: IN int ioflag; ! 608: IN struct ucred *cred; ! 609: }; ! 610: ! 611: # ! 612: #% pageout vp L L L ! 613: # ! 614: vop_pageout { ! 615: IN struct vnode *vp; ! 616: INOUT struct uio *uio; ! 617: IN int ioflag; ! 618: IN struct ucred *cred; ! 619: }; ! 620: ! 621: # ! 622: #% devblocksize vp = = = ! 623: # ! 624: vop_devblocksize { ! 625: IN struct vnode *vp; ! 626: OUT register_t *retval; ! 627: }; ! 628: ! 629: # ! 630: #% searchfs vp L L L ! 631: # ! 632: ! 633: vop_searchfs { ! 634: IN struct vnode *vp; ! 635: IN void *searchparams1; ! 636: IN void *searchparams2; ! 637: IN struct attrlist *searchattrs; ! 638: IN u_long maxmatches; ! 639: IN struct timeval *timelimit; ! 640: OUT struct attrlist *returnattrs; ! 641: OUT u_long *nummatches; ! 642: IN u_long scriptcode; ! 643: IN u_long options; ! 644: INOUT struct uio *uio; ! 645: INOUT struct searchstate *searchstate; ! 646: }; ! 647: ! 648: # ! 649: #% copyfile fvp U U U ! 650: #% copyfile tdvp L U U ! 651: #% copyfile tvp X U U ! 652: # ! 653: vop_copyfile { ! 654: IN WILLRELE struct vnode *fvp; ! 655: IN WILLRELE struct vnode *tdvp; ! 656: IN WILLRELE struct vnode *tvp; ! 657: IN struct componentname *tcnp; ! 658: IN int mode; ! 659: IN int flags; ! 660: }; ! 661:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.