vnode_if.src revision 29353
1# 2# Copyright (c) 1992, 1993 3# The Regents of the University of California. All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions 7# are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 3. All advertising materials mentioning features or use of this software 14# must display the following acknowledgement: 15# This product includes software developed by the University of 16# California, Berkeley and its contributors. 17# 4. Neither the name of the University nor the names of its contributors 18# may be used to endorse or promote products derived from this software 19# without specific prior written permission. 20# 21# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31# SUCH DAMAGE. 32# 33# @(#)vnode_if.src 8.12 (Berkeley) 5/14/95 34# $Id: vnode_if.src,v 1.12 1997/08/25 20:28:49 phk Exp $ 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# 61vop_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# 73vop_cachedlookup { 74 IN struct vnode *dvp; 75 INOUT struct vnode **vpp; 76 IN struct componentname *cnp; 77}; 78 79# 80#% create dvp L U U 81#% create vpp - L - 82# 83vop_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# 95vop_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# 105vop_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#% open vp L L L 114# 115vop_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# 125vop_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# 135vop_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# 145vop_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# 155vop_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#% read vp L L L 164# 165vop_read { 166 IN struct vnode *vp; 167 INOUT struct uio *uio; 168 IN int ioflag; 169 IN struct ucred *cred; 170}; 171 172# 173#% write vp L L L 174# 175vop_write { 176 IN struct vnode *vp; 177 INOUT struct uio *uio; 178 IN int ioflag; 179 IN struct ucred *cred; 180}; 181 182# 183#% lease vp = = = 184# 185vop_lease { 186 IN struct vnode *vp; 187 IN struct proc *p; 188 IN struct ucred *cred; 189 IN int flag; 190}; 191 192# 193#% ioctl vp U U U 194# 195vop_ioctl { 196 IN struct vnode *vp; 197 IN u_long command; 198 IN caddr_t data; 199 IN int fflag; 200 IN struct ucred *cred; 201 IN struct proc *p; 202}; 203 204# 205#% poll vp U U U 206# 207vop_poll { 208 IN struct vnode *vp; 209 IN int events; 210 IN struct ucred *cred; 211 IN struct proc *p; 212}; 213 214# 215#% revoke vp U U U 216# 217vop_revoke { 218 IN struct vnode *vp; 219 IN int flags; 220}; 221 222# 223# XXX - not used 224# 225vop_mmap { 226 IN struct vnode *vp; 227 IN int fflags; 228 IN struct ucred *cred; 229 IN struct proc *p; 230}; 231 232# 233#% fsync vp L L L 234# 235vop_fsync { 236 IN struct vnode *vp; 237 IN struct ucred *cred; 238 IN int waitfor; 239 IN struct proc *p; 240}; 241 242# 243# XXX - not used 244# Needs work: Is newoff right? What's it mean? 245# 246vop_seek { 247 IN struct vnode *vp; 248 IN off_t oldoff; 249 IN off_t newoff; 250 IN struct ucred *cred; 251}; 252 253# 254#% remove dvp L U U 255#% remove vp L U U 256# 257vop_remove { 258 IN WILLRELE struct vnode *dvp; 259 IN WILLRELE struct vnode *vp; 260 IN struct componentname *cnp; 261}; 262 263# 264#% link vp U U U 265#% link tdvp L U U 266# 267vop_link { 268 IN WILLRELE struct vnode *tdvp; 269 IN struct vnode *vp; 270 IN struct componentname *cnp; 271}; 272 273# 274#% rename fdvp U U U 275#% rename fvp U U U 276#% rename tdvp L U U 277#% rename tvp X U U 278# 279vop_rename { 280 IN WILLRELE struct vnode *fdvp; 281 IN WILLRELE struct vnode *fvp; 282 IN struct componentname *fcnp; 283 IN WILLRELE struct vnode *tdvp; 284 IN WILLRELE struct vnode *tvp; 285 IN struct componentname *tcnp; 286}; 287 288# 289#% mkdir dvp L U U 290#% mkdir vpp - L - 291# 292vop_mkdir { 293 IN WILLRELE struct vnode *dvp; 294 OUT struct vnode **vpp; 295 IN struct componentname *cnp; 296 IN struct vattr *vap; 297}; 298 299# 300#% rmdir dvp L U U 301#% rmdir vp L U U 302# 303vop_rmdir { 304 IN WILLRELE struct vnode *dvp; 305 IN WILLRELE struct vnode *vp; 306 IN struct componentname *cnp; 307}; 308 309# 310#% symlink dvp L U U 311#% symlink vpp - U - 312# 313# XXX - note that the return vnode has already been VRELE'ed 314# by the filesystem layer. To use it you must use vget, 315# possibly with a further namei. 316# 317vop_symlink { 318 IN WILLRELE struct vnode *dvp; 319 OUT WILLRELE struct vnode **vpp; 320 IN struct componentname *cnp; 321 IN struct vattr *vap; 322 IN char *target; 323}; 324 325# 326#% readdir vp L L L 327# 328vop_readdir { 329 IN struct vnode *vp; 330 INOUT struct uio *uio; 331 IN struct ucred *cred; 332 INOUT int *eofflag; 333 OUT int *ncookies; 334 INOUT u_long **cookies; 335}; 336 337# 338#% readlink vp L L L 339# 340vop_readlink { 341 IN struct vnode *vp; 342 INOUT struct uio *uio; 343 IN struct ucred *cred; 344}; 345 346# 347#% abortop dvp = = = 348# 349vop_abortop { 350 IN struct vnode *dvp; 351 IN struct componentname *cnp; 352}; 353 354# 355#% inactive vp L U U 356# 357vop_inactive { 358 IN struct vnode *vp; 359 IN struct proc *p; 360}; 361 362# 363#% reclaim vp U U U 364# 365vop_reclaim { 366 IN struct vnode *vp; 367 IN struct proc *p; 368}; 369 370# 371#% lock vp U L U 372# 373vop_lock { 374 IN struct vnode *vp; 375 IN int flags; 376 IN struct proc *p; 377}; 378 379# 380#% unlock vp L U L 381# 382vop_unlock { 383 IN struct vnode *vp; 384 IN int flags; 385 IN struct proc *p; 386}; 387 388# 389#% bmap vp L L L 390#% bmap vpp - U - 391# 392vop_bmap { 393 IN struct vnode *vp; 394 IN daddr_t bn; 395 OUT struct vnode **vpp; 396 IN daddr_t *bnp; 397 OUT int *runp; 398 OUT int *runb; 399}; 400 401# 402# Needs work: no vp? 403# 404#vop_strategy { 405# IN struct buf *bp; 406#}; 407 408# 409#% print vp = = = 410# 411vop_print { 412 IN struct vnode *vp; 413}; 414 415# 416#% islocked vp = = = 417# 418vop_islocked { 419 IN struct vnode *vp; 420}; 421 422# 423#% pathconf vp L L L 424# 425vop_pathconf { 426 IN struct vnode *vp; 427 IN int name; 428 OUT register_t *retval; 429}; 430 431# 432#% advlock vp U U U 433# 434vop_advlock { 435 IN struct vnode *vp; 436 IN caddr_t id; 437 IN int op; 438 IN struct flock *fl; 439 IN int flags; 440}; 441 442# 443#% blkatoff vp L L L 444# 445vop_blkatoff { 446 IN struct vnode *vp; 447 IN off_t offset; 448 OUT char **res; 449 OUT struct buf **bpp; 450}; 451 452# 453#% valloc pvp L L L 454# 455vop_valloc { 456 IN struct vnode *pvp; 457 IN int mode; 458 IN struct ucred *cred; 459 OUT struct vnode **vpp; 460}; 461 462# 463#% reallocblks vp L L L 464# 465vop_reallocblks { 466 IN struct vnode *vp; 467 IN struct cluster_save *buflist; 468}; 469 470# 471#% vfree pvp L L L 472# 473vop_vfree { 474 IN struct vnode *pvp; 475 IN ino_t ino; 476 IN int mode; 477}; 478 479# 480#% truncate vp L L L 481# 482vop_truncate { 483 IN struct vnode *vp; 484 IN off_t length; 485 IN int flags; 486 IN struct ucred *cred; 487 IN struct proc *p; 488}; 489 490# 491#% update vp L L L 492# 493vop_update { 494 IN struct vnode *vp; 495 IN struct timeval *access; 496 IN struct timeval *modify; 497 IN int waitfor; 498}; 499 500vop_getpages { 501 IN struct vnode *vp; 502 IN vm_page_t *m; 503 IN int count; 504 IN int reqpage; 505 IN vm_ooffset_t offset; 506}; 507 508vop_putpages { 509 IN struct vnode *vp; 510 IN vm_page_t *m; 511 IN int count; 512 IN int sync; 513 IN int *rtvals; 514 IN vm_ooffset_t offset; 515}; 516 517# 518# Needs work: no vp? 519# 520#vop_bwrite { 521# IN struct buf *bp; 522#}; 523