Annotation of sys/kern/vnode_if.src, Revision 1.1
1.1 ! nbrk 1: # $OpenBSD: vnode_if.src,v 1.32 2007/01/16 17:52:18 thib Exp $
! 2: # $NetBSD: vnode_if.src,v 1.10 1996/05/11 18:26:27 mycroft Exp $
! 3: #
! 4: # Copyright (c) 1992, 1993
! 5: # The Regents of the University of California. All rights reserved.
! 6: #
! 7: # Redistribution and use in source and binary forms, with or without
! 8: # modification, are permitted provided that the following conditions
! 9: # are met:
! 10: # 1. Redistributions of source code must retain the above copyright
! 11: # notice, this list of conditions and the following disclaimer.
! 12: # 2. Redistributions in binary form must reproduce the above copyright
! 13: # notice, this list of conditions and the following disclaimer in the
! 14: # documentation and/or other materials provided with the distribution.
! 15: # 3. Neither the name of the University nor the names of its contributors
! 16: # may be used to endorse or promote products derived from this software
! 17: # without specific prior written permission.
! 18: #
! 19: # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 20: # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 21: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 22: # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 23: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 24: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 25: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 26: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 27: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 28: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 29: # SUCH DAMAGE.
! 30: #
! 31: # @(#)vnode_if.src 8.3 (Berkeley) 2/3/94
! 32: #
! 33:
! 34:
! 35: #
! 36: # Above each of the vop descriptors is a specification of the locking
! 37: # protocol used by each vop call. The first column is the name of
! 38: # the variable, the remaining three columns are in, out and error
! 39: # respectively. The "in" column defines the lock state on input,
! 40: # the "out" column defines the state on successful return, and the
! 41: # "error" column defines the locking state on error exit.
! 42: #
! 43: # The locking value can take the following values:
! 44: # L: locked.
! 45: # U: unlocked/
! 46: # -: not applicable. vnode does not yet (or no longer) exists.
! 47: # =: the same on input and output, may be either L or U.
! 48: # X: locked if not nil.
! 49: #
! 50:
! 51:
! 52: #
! 53: #% islocked vp = = =
! 54: #
! 55: vop_islocked {
! 56: IN struct vnode *vp;
! 57: };
! 58:
! 59: #
! 60: #% lookup dvp L ? ?
! 61: #% lookup vpp - L -
! 62: #
! 63: #
! 64: # Note that EJUSTRETURN is not considered an error condition for locking
! 65: # purposes.
! 66: #
! 67: # if both ISLASTCN and LOCKPARENT are set in cnp->cn_flags then
! 68: #
! 69: # dvp L L L*
! 70: #
! 71: # otherwise,
! 72: #
! 73: # dvp L U L*
! 74: #
! 75: # * The lock state on return is indeterminate since the lookup implementations
! 76: # unlock and relock the vnode (an operation which is not guaranteed to
! 77: # succeed). However, these types of failures should be rare. Unfortunately,
! 78: # they are currently undetectable.
! 79: #
! 80:
! 81: vop_lookup {
! 82: IN struct vnode *dvp;
! 83: INOUT struct vnode **vpp;
! 84: IN struct componentname *cnp;
! 85: };
! 86:
! 87: #
! 88: #% create dvp L U U
! 89: #% create vpp - L -
! 90: #
! 91:
! 92: vop_create {
! 93: IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
! 94: OUT struct vnode **vpp;
! 95: IN struct componentname *cnp;
! 96: IN struct vattr *vap;
! 97: };
! 98:
! 99: #
! 100: #% mknod dvp L U U
! 101: #% mknod vpp - X -
! 102: #
! 103:
! 104: vop_mknod {
! 105: IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
! 106: OUT WILLRELE struct vnode **vpp;
! 107: IN struct componentname *cnp;
! 108: IN struct vattr *vap;
! 109: };
! 110:
! 111: #
! 112: #% open vp = = =
! 113: #
! 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 L L L
! 124: #
! 125:
! 126: vop_close {
! 127: IN SHOULDBELOCKED struct vnode *vp;
! 128: IN int fflag;
! 129: IN struct ucred *cred;
! 130: IN struct proc *p;
! 131: };
! 132:
! 133: #
! 134: #% access vp L L L
! 135: #
! 136:
! 137: vop_access {
! 138: IN SHOULDBELOCKED struct vnode *vp;
! 139: IN int mode;
! 140: IN struct ucred *cred;
! 141: IN struct proc *p;
! 142: };
! 143:
! 144: #
! 145: #% getattr vp = = =
! 146: #
! 147:
! 148: vop_getattr {
! 149: IN struct vnode *vp;
! 150: IN struct vattr *vap;
! 151: IN struct ucred *cred;
! 152: IN struct proc *p;
! 153: };
! 154:
! 155:
! 156: #
! 157: #% setattr vp L L L
! 158: #
! 159:
! 160: vop_setattr {
! 161: IN SHOULDBELOCKED struct vnode *vp;
! 162: IN struct vattr *vap;
! 163: IN struct ucred *cred;
! 164: IN struct proc *p;
! 165: };
! 166:
! 167: #
! 168: #% read vp L L L
! 169: #
! 170:
! 171: vop_read {
! 172: IN SHOULDBELOCKED struct vnode *vp;
! 173: INOUT struct uio *uio;
! 174: IN int ioflag;
! 175: IN struct ucred *cred;
! 176: };
! 177:
! 178: #
! 179: #% write vp L L L
! 180: #
! 181:
! 182: vop_write {
! 183: IN SHOULDBELOCKED struct vnode *vp;
! 184: INOUT struct uio *uio;
! 185: IN int ioflag;
! 186: IN struct ucred *cred;
! 187: };
! 188:
! 189: #
! 190: #% ioctl vp U U U
! 191: #
! 192:
! 193: vop_ioctl {
! 194: IN struct vnode *vp;
! 195: IN u_long command;
! 196: IN void *data;
! 197: IN int fflag;
! 198: IN struct ucred *cred;
! 199: IN struct proc *p;
! 200: };
! 201:
! 202: #
! 203: #% poll vp U U U
! 204: #
! 205: vop_poll {
! 206: IN struct vnode *vp;
! 207: IN int events;
! 208: IN struct proc *p;
! 209: };
! 210:
! 211: #
! 212: #% kqfilter vp U U U
! 213: #
! 214: vop_kqfilter {
! 215: IN struct vnode *vp;
! 216: IN struct knote *kn;
! 217: };
! 218:
! 219: #
! 220: #% revoke vp U U U
! 221: #
! 222: vop_revoke {
! 223: IN struct vnode *vp;
! 224: IN int flags;
! 225: };
! 226:
! 227: #
! 228: #% fsync vp L L L
! 229: #
! 230: vop_fsync {
! 231: IN SHOULDBELOCKED struct vnode *vp;
! 232: IN struct ucred *cred;
! 233: IN int waitfor;
! 234: IN struct proc *p;
! 235: };
! 236:
! 237: #
! 238: #% remove dvp L U U
! 239: #% remove vp L U U
! 240: #
! 241:
! 242: vop_remove {
! 243: IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
! 244: IN SHOULDBELOCKED WILLPUT struct vnode *vp;
! 245: IN struct componentname *cnp;
! 246: };
! 247:
! 248: #
! 249: #% link dvp L U U
! 250: #% link vp U U U
! 251: #
! 252: vop_link {
! 253: IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
! 254: IN struct vnode *vp;
! 255: IN struct componentname *cnp;
! 256: };
! 257:
! 258: #
! 259: #% rename fdvp U U U
! 260: #% rename fvp U U U
! 261: #% rename tdvp L U U
! 262: #% rename tvp X U U
! 263: #
! 264:
! 265: vop_rename {
! 266: IN WILLRELE struct vnode *fdvp;
! 267: IN WILLRELE struct vnode *fvp;
! 268: IN struct componentname *fcnp;
! 269: IN SHOULDBELOCKED WILLPUT struct vnode *tdvp;
! 270: IN WILLRELE struct vnode *tvp;
! 271: IN struct componentname *tcnp;
! 272: };
! 273:
! 274: #
! 275: #% mkdir dvp L U U
! 276: #% mkdir vpp - L -
! 277: #
! 278:
! 279: vop_mkdir {
! 280: IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
! 281: OUT struct vnode **vpp;
! 282: IN struct componentname *cnp;
! 283: IN struct vattr *vap;
! 284: };
! 285:
! 286: #
! 287: #% rmdir dvp L U U
! 288: #% rmdir vp L U U
! 289: #
! 290:
! 291: vop_rmdir {
! 292: IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
! 293: IN SHOULDBELOCKED WILLPUT struct vnode *vp;
! 294: IN struct componentname *cnp;
! 295: };
! 296:
! 297: #
! 298: #% symlink dvp L U U
! 299: #% symlink vpp - U -
! 300: #
! 301: # XXX - note that the return vnode has already been VRELE'ed
! 302: # by the filesystem layer. To use it you must use vget,
! 303: # possibly with a further namei.
! 304: #
! 305:
! 306: vop_symlink {
! 307: IN SHOULDBELOCKED WILLPUT struct vnode *dvp;
! 308: OUT WILLRELE struct vnode **vpp;
! 309: IN struct componentname *cnp;
! 310: IN struct vattr *vap;
! 311: IN char *target;
! 312: };
! 313:
! 314: #
! 315: #% readdir vp L L L
! 316: #
! 317:
! 318: vop_readdir {
! 319: IN SHOULDBELOCKED struct vnode *vp;
! 320: INOUT struct uio *uio;
! 321: IN struct ucred *cred;
! 322: INOUT int *eofflag;
! 323: OUT int *ncookies;
! 324: INOUT u_long **cookies;
! 325: };
! 326:
! 327: #
! 328: #% readlink vp L L L
! 329: #
! 330: vop_readlink {
! 331: IN SHOULDBELOCKED struct vnode *vp;
! 332: INOUT struct uio *uio;
! 333: IN struct ucred *cred;
! 334: };
! 335:
! 336: #
! 337: #% abortop dvp = = =
! 338: #
! 339: vop_abortop {
! 340: IN struct vnode *dvp;
! 341: IN struct componentname *cnp;
! 342: };
! 343:
! 344:
! 345: #
! 346: #% inactive vp L U U
! 347: #
! 348: vop_inactive {
! 349: IN SHOULDBELOCKED WILLUNLOCK struct vnode *vp;
! 350: IN struct proc *p;
! 351: };
! 352:
! 353: #
! 354: #% reclaim vp U U U
! 355: #
! 356:
! 357: vop_reclaim {
! 358: IN struct vnode *vp;
! 359: IN struct proc *p;
! 360: };
! 361:
! 362: #
! 363: #% lock vp U L U
! 364: #
! 365:
! 366: vop_lock {
! 367: IN struct vnode *vp;
! 368: IN int flags;
! 369: IN struct proc *p;
! 370: };
! 371:
! 372: #
! 373: #% unlock vp L U L
! 374: #
! 375:
! 376: vop_unlock {
! 377: IN struct vnode *vp;
! 378: IN int flags;
! 379: IN struct proc *p;
! 380: };
! 381:
! 382: #
! 383: #% bmap vp L L L
! 384: #% bmap vpp - U -
! 385: #
! 386:
! 387: vop_bmap {
! 388: IN SHOULDBELOCKED struct vnode *vp;
! 389: IN daddr64_t bn;
! 390: OUT struct vnode **vpp;
! 391: IN daddr64_t *bnp;
! 392: OUT int *runp;
! 393: };
! 394:
! 395: #
! 396: # Needs work: no vp?
! 397: #
! 398: #vop_strategy {
! 399: # IN struct buf *bp;
! 400: #};
! 401:
! 402: #
! 403: #% print vp = = =
! 404: #
! 405: vop_print {
! 406: IN struct vnode *vp;
! 407: };
! 408: #
! 409: #% pathconf vp L L L
! 410: #
! 411: vop_pathconf {
! 412: IN SHOULDBELOCKED struct vnode *vp;
! 413: IN int name;
! 414: OUT register_t *retval;
! 415: };
! 416:
! 417: #
! 418: #% advlock vp U U U
! 419: #
! 420: vop_advlock {
! 421: IN struct vnode *vp;
! 422: IN void *id;
! 423: IN int op;
! 424: IN struct flock *fl;
! 425: IN int flags;
! 426: };
! 427:
! 428: #
! 429: #% reallocblks vp L L L
! 430: #
! 431: vop_reallocblks {
! 432: IN SHOULDBELOCKED struct vnode *vp;
! 433: IN struct cluster_save *buflist;
! 434: };
! 435:
! 436: # Needs work: no vp?
! 437: #vop_bwrite {
! 438: # IN struct buf *bp;
! 439: #};
CVSweb