1.\" $NetBSD: vnodeops.9,v 1.51 2006/09/16 08:54:22 wiz Exp $ 2.\" 3.\" Copyright (c) 2001, 2005, 2006 The NetBSD Foundation, Inc. 4.\" All rights reserved. 5.\" 6.\" This code is derived from software contributed to The NetBSD Foundation 7.\" by Gregory McGarry. 8.\" 9.\" Redistribution and use in source and binary forms, with or without 10.\" modification, are permitted provided that the following conditions 11.\" are met: 12.\" 1. Redistributions of source code must retain the above copyright 13.\" notice, this list of conditions and the following disclaimer. 14.\" 2. Redistributions in binary form must reproduce the above copyright 15.\" notice, this list of conditions and the following disclaimer in the 16.\" documentation and/or other materials provided with the distribution. 17.\" 3. All advertising materials mentioning features or use of this software 18.\" must display the following acknowledgement: 19.\" This product includes software developed by the NetBSD 20.\" Foundation, Inc. and its contributors. 21.\" 4. Neither the name of The NetBSD Foundation nor the names of its 22.\" contributors may be used to endorse or promote products derived 23.\" from this software without specific prior written permission. 24.\" 25.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 26.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 29.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35.\" POSSIBILITY OF SUCH DAMAGE. 36.\" 37.Dd September 16, 2006 38.Dt VNODEOPS 9 39.Os 40.Sh NAME 41.Nm vnodeops , 42.Nm VOP_LOOKUP , 43.Nm VOP_CREATE , 44.Nm VOP_MKNOD , 45.Nm VOP_OPEN , 46.Nm VOP_CLOSE , 47.Nm VOP_ACCESS , 48.Nm VOP_GETATTR , 49.Nm VOP_SETATTR , 50.Nm VOP_READ , 51.Nm VOP_WRITE , 52.Nm VOP_IOCTL , 53.Nm VOP_FCNTL , 54.Nm VOP_POLL , 55.Nm VOP_KQFILTER , 56.Nm VOP_REVOKE , 57.Nm VOP_MMAP , 58.Nm VOP_FSYNC , 59.Nm VOP_SEEK , 60.Nm VOP_REMOVE , 61.Nm VOP_LINK , 62.Nm VOP_RENAME , 63.Nm VOP_MKDIR , 64.Nm VOP_RMDIR , 65.Nm VOP_SYMLINK , 66.Nm VOP_READDIR , 67.Nm VOP_READLINK , 68.Nm VOP_ABORTOP , 69.Nm VOP_INACTIVE , 70.Nm VOP_RECLAIM , 71.Nm VOP_LOCK , 72.Nm VOP_UNLOCK , 73.Nm VOP_ISLOCKED , 74.Nm VOP_BMAP , 75.Nm VOP_PRINT , 76.Nm VOP_PATHCONF , 77.Nm VOP_ADVLOCK , 78.Nm VOP_LEASE , 79.Nm VOP_WHITEOUT , 80.Nm VOP_GETPAGES , 81.Nm VOP_PUTPAGES , 82.Nm VOP_STRATEGY , 83.Nm VOP_BWRITE , 84.Nm VOP_GETEXTATTR , 85.Nm VOP_SETEXTATTR , 86.Nm VOP_LISTEXTATTR , 87.Nd vnode operations 88.Sh SYNOPSIS 89.In sys/param.h 90.In sys/buf.h 91.In sys/dirent.h 92.In sys/lock.h 93.In sys/vnode.h 94.In sys/mount.h 95.In sys/namei.h 96.In sys/unistd.h 97.In sys/fcntl.h 98.In sys/lockf.h 99.In sys/extattr.h 100.Ft int 101.Fn VOP_LOOKUP "struct vnode *dvp" "struct vnode **vpp" \ 102"struct componentname *cnp" 103.Ft int 104.Fn VOP_CREATE "struct vnode *dvp" "struct vnode **vpp" \ 105"struct componentname *cnp" "struct vattr *vap" 106.Ft int 107.Fn VOP_MKNOD "struct vnode *dvp" "struct vnode **vpp" \ 108"struct componentname *cnp" "struct vattr *vap" 109.Ft int 110.Fn VOP_OPEN "struct vnode *vp" "int mode" "struct ucred *cred" \ 111"struct lwp *l" 112.Ft int 113.Fn VOP_CLOSE "struct vnode *vp" "int fflag" "struct ucred *cred" \ 114"struct lwp *l" 115.Ft int 116.Fn VOP_ACCESS "struct vnode *vp" "int mode" "struct ucred *cred" \ 117"struct lwp *l" 118.Ft int 119.Fn VOP_GETATTR "struct vnode *vp" "struct vattr *vap" \ 120"struct ucred *cred" "struct lwp *l" 121.Ft int 122.Fn VOP_SETATTR "struct vnode *vp" "struct vattr *vap" \ 123"struct ucred *cred" "struct lwp *l" 124.Ft int 125.Fn VOP_READ "struct vnode *vp" "struct uio *uio" "int ioflag" \ 126"struct ucred *cred" 127.Ft int 128.Fn VOP_WRITE "struct vnode *vp" "struct uio *uio" "int ioflag" \ 129"struct ucred *cred" 130.Ft int 131.Fn VOP_IOCTL "struct vnode *vp" "u_long command" "void *data" \ 132"int fflag" "struct ucred *cred" "struct lwp *l" 133.Ft int 134.Fn VOP_FCNTL "struct vnode *vp" "u_int command" "void *data" \ 135"int fflag" "struct ucred *cred" "struct lwp *l" 136.Ft int 137.Fn VOP_POLL "struct vnode *vp" "int events" "struct lwp *l" 138.Ft int 139.Fn VOP_KQFILTER "struct vnode *vp" "struct knote *kn" 140.Ft int 141.Fn VOP_REVOKE "struct vnode *vp" "int flags" 142.Ft int 143.Fn VOP_MMAP "struct vnode *vp" "int fflags" \ 144"struct ucred *cred" "struct lwp *l" 145.Ft int 146.Fn VOP_FSYNC "struct vnode *vp" "struct ucred *cred" "int flags" \ 147"off_t offlo" "off_t offhi" "struct lwp *l" 148.Ft int 149.Fn VOP_SEEK "struct vnode *vp" "off_t oldoff" "off_t newoff" \ 150"struct ucred *cred" 151.Ft int 152.Fn VOP_REMOVE "struct vnode *vp" "struct vnode *vp" \ 153"struct componentname *cnp" 154.Ft int 155.Fn VOP_LINK "struct vnode *dvp" "struct vnode *vp" \ 156"struct componentname *cnp" 157.Ft int 158.Fn VOP_RENAME "struct vnode *fdvp" "struct vnode *vp" \ 159"struct componentname *fcnp" "struct componentname *tdvp" \ 160"struct vnode *tvp" "struct componentname *tcnp" 161.Ft int 162.Fn VOP_MKDIR "struct vnode *dvp" "struct vnode **vpp" \ 163"struct componentname *cnp" "struct vattr *vap" 164.Ft int 165.Fn VOP_RMDIR "struct vnode *dvp" "struct vnode *vp" \ 166"struct componentname *cnp" 167.Ft int 168.Fn VOP_SYMLINK "struct vnode *dvp" "struct vnode **vpp" \ 169"struct componentname *cnp" "struct vattr *vap" "char *target" 170.Ft int 171.Fn VOP_READDIR "struct vnode *vp" "struct uio *uio" \ 172"struct ucred *cred" "int *eofflag" "off_t **cookies" "int *ncookies" 173.Ft int 174.Fn VOP_READLINK "struct vnode *vp" "struct uio *uio" "struct ucred *cred" 175.Ft int 176.Fn VOP_ABORTOP "struct vnode *dvp" "struct componentname *cnp" 177.Ft int 178.Fn VOP_INACTIVE "struct vnode *vp" "struct lwp *l" 179.Ft int 180.Fn VOP_RECLAIM "struct vnode *vp" "struct lwp *l" 181.Ft int 182.Fn VOP_LOCK "struct vnode *vp" "int flags" 183.Ft int 184.Fn VOP_UNLOCK "struct vnode *vp" "int flags" 185.Ft int 186.Fn VOP_ISLOCKED "struct vnode *vp" 187.Ft int 188.Fn VOP_BMAP "struct vnode *vp" "daddr_t bn" "struct vnode **vpp" \ 189"daddr_t *bnp" "int *runp" 190.Ft int 191.Fn VOP_PRINT "struct vnode *vp" 192.Ft int 193.Fn VOP_PATHCONF "struct vnode *vp" "int name" "register_t *retval" 194.Ft int 195.Fn VOP_ADVLOCK "struct vnode *vp" "void *id" "int op" \ 196"struct flock *fl" "int flags" 197.Ft int 198.Fn VOP_LEASE "struct vnode *vp" "struct lwp *l" "struct ucred *cred" \ 199"int flag" 200.Ft int 201.Fn VOP_WHITEOUT "struct vnode *dvp" "struct componentname *cnp" \ 202"int flags" 203.Ft int 204.Fn VOP_GETPAGES "struct vnode *vp" "voff_t offset" "struct vm_page **m" \ 205"int *count" "int centeridx" "vm_prot_t access_type" "int advice" "int flags" 206.Ft int 207.Fn VOP_PUTPAGES "struct vnode *vp" "voff_t offlo" "voff_t offlo" \ 208"int flags" 209.Ft int 210.Fn VOP_STRATEGY "struct vnode *vp" "struct buf *bp" 211.Ft int 212.Fn VOP_BWRITE "struct buf *bp" 213.Ft int 214.Fn VOP_GETEXTATTR "struct vnode *vp" "int attrnamespace" "const char *name" \ 215"struct uio *uio" "size_t *size" "struct ucred *cred" "struct lwp *l" 216.Ft int 217.Fn VOP_SETEXTATTR "struct vnode *vp" "int attrnamespace" "const char *name" \ 218"struct uio *uio" "struct ucred *cred" "struct lwp *l" 219.Ft int 220.Fn VOP_LISTEXTATTR "struct vnode *vp" "int attrnamespace" "struct uio *uio" \ 221"size_t *size" "struct ucred *cred" "struct lwp *l" 222.Pp 223Not all header files are required for each function. 224.Sh DESCRIPTION 225The vnode operations vector describes what operations can be done to 226the file associated with the vnode. 227The system maintains one vnode operations vector for each file system 228type configured into the kernel. 229The vnode operations vector contains a pointer to a function for each 230operation supported by the file system. 231Many of the functions described in the vnode operations vector are 232closely related to their corresponding system calls. 233In most cases, they are called as a result of the system call 234associated with the operation being invoked. 235.Pp 236Functions in the vnode operations vector are invoked using specialised 237macros. 238The following table lists the elements of the vnode operations vector, 239the corresponding invocation macro, and a description of the element. 240.Pp 241.nf 242.ta \w'int (*vop_listextattr)()'u+2n +\w'VOP_LISTEXTATTR'u+2n +\w'Map file into user address space'u 243\fIVector element\fP \fIMacro\fP \fIDescription\fP 244.ta \w'int (*vop_listextattr)()'u+2n +\w'VOP_LISTEXTATTR'u+2n +\w'Map file into user address space'u+6nC 245.sp 5p 246int (*vop_lookup)() VOP_LOOKUP Lookup file name in name cache 247int (*vop_create)() VOP_CREATE Create a new file 248int (*vop_mknod)() VOP_MKNOD Make a new device 249int (*vop_open)() VOP_OPEN Open a file 250int (*vop_close)() VOP_CLOSE Close a file 251int (*vop_access)() VOP_ACCESS Determine file accessibility 252int (*vop_getattr)() VOP_GETATTR Get file attributes 253int (*vop_setattr)() VOP_SETATTR Set file attributes 254int (*vop_read)() VOP_READ Read from a file 255int (*vop_write)() VOP_WRITE Write to a file 256int (*vop_ioctl)() VOP_IOCTL Perform device-specific I/O 257int (*vop_fcntl)() VOP_FCNTL Perform file control 258int (*vop_poll)() VOP_POLL Test if poll event has occurred 259int (*vop_kqfilter)() VOP_KQFILTER Register a knote 260int (*vop_revoke)() VOP_REVOKE Eliminate vode activity 261int (*vop_mmap)() VOP_MMAP Map file into user address space 262int (*vop_fsync)() VOP_FSYNC Flush pending data to disk 263int (*vop_seek)() VOP_SEEK Test if file is seekable 264int (*vop_remove)() VOP_REMOVE Remove a file 265int (*vop_link)() VOP_LINK Link a file 266int (*vop_rename)() VOP_RENAME Rename a file 267int (*vop_mkdir)() VOP_MKDIR Make a new directory 268int (*vop_rmdir)() VOP_RMDIR Remove a directory 269int (*vop_symlink)() VOP_SYMLINK Create a symbolic link 270int (*vop_readdir)() VOP_READDIR Read directory entry 271int (*vop_readlink)() VOP_READLINK Read contents of a symlink 272int (*vop_abortop)() VOP_ABORTOP Abort pending operation 273int (*vop_inactive)() VOP_INACTIVE Release the inactive vnode 274int (*vop_reclaim)() VOP_RECLAIM Reclaim vnode for another file 275int (*vop_lock)() VOP_LOCK Sleep until vnode lock is free 276int (*vop_unlock)() VOP_UNLOCK Wake up process sleeping on lock 277int (*vop_islocked)() VOP_ISLOCKED Test if vnode is locked 278int (*vop_bmap)() VOP_BMAP Logical block number conversion 279int (*vop_print)() VOP_PRINT Print debugging information 280int (*vop_pathconf)() VOP_PATHCONF Return POSIX pathconf data 281int (*vop_advlock)() VOP_ADVLOCK Advisory record locking 282int (*vop_lease)() VOP_LEASE Validate vnode credentials 283int (*vop_whiteout)() VOP_WHITEOUT Whiteout vnode 284int (*vop_getpages)() VOP_GETPAGES Read VM pages from file 285int (*vop_putpages)() VOP_PUTPAGES Write VM pages to file 286int (*vop_strategy)() VOP_STRATEGY Read/write a file system buffer 287int (*vop_bwrite)() VOP_BWRITE Write a file system buffer 288int (*vop_getextattr)() VOP_GETEXTATTR Get extended attribute 289int (*vop_setextattr)() VOP_SETEXTATTR Set extended attribute 290int (*vop_listextattr)() VOP_LISTEXTATTR List extended attributes 291.fi 292.Pp 293The implementation details of the vnode operations vector are not 294quite what is described here. 295.Pp 296If the file system type does not support a specific operation, it must 297nevertheless assign an appropriate function in the vnode operations 298vector to do the minimum required of it. 299In most cases, such functions either do nothing or return an error 300value to the effect that it is not supported. 301.Pp 302Many of the functions in the vnode operations vector take a 303componentname structure. 304It is used to encapsulate many parameters into a single function 305argument. 306It has the following structure: 307.Bd -literal 308struct componentname { 309 /* 310 * Arguments to lookup. 311 */ 312 u_long cn_nameiop; /* namei operation */ 313 u_long cn_flags; /* flags to namei */ 314 struct proc *cn_proc; /* process requesting lookup */ 315 struct ucred *cn_cred; /* credentials */ 316 /* 317 * Shared between lookup and commit routines. 318 */ 319 char *cn_pnbuf; /* pathname buffer */ 320 const char *cn_nameptr; /* pointer to looked up name */ 321 long cn_namelen; /* length of looked up component */ 322 u_long cn_hash; /* hash value of looked up name */ 323 long cn_consume; /* chars to consume in lookup() */ 324}; 325.Ed 326.Pp 327The top half of the structure is used exclusively for the pathname 328lookups using 329.Fn VOP_LOOKUP 330and is initialised by the caller. 331The semantics of the lookup are affected by the lookup operation 332specified in 333.Em cn_nameiop 334and the flags specified in 335.Em cn_flags . 336Valid operations are: 337.Pp 338.Bl -tag -offset indent -width LOOKUP -compact 339.It LOOKUP 340perform name lookup only 341.It CREATE 342set up for file creation 343.It DELETE 344set up for file deletion 345.It RENAME 346set up for file renaming 347.It OPMASK 348mask for operation 349.El 350.Pp 351Valid values for 352.Em cn-\*[Gt]cn_flags 353are: 354.Pp 355.Bl -tag -offset indent -width LOCKPARENT -compact 356.It LOCKLEAF 357lock inode on return 358.It LOCKPARENT 359want parent vnode returned locked 360.It WANTPARENT 361want parent vnode returned unlocked 362.It NOCACHE 363name must not be left in name cache (see 364.Xr namecache 9 ) 365.It FOLLOW 366follow symbolic links 367.It NOFOLLOW 368do not follow symbolic links (pseudo) 369.It MODMASK 370mask of operational modifiers 371.El 372.Pp 373No vnode operations may be called from interrupt context. 374Most operations also require the vnode to be locked on entry. 375To prevent deadlocks, when acquiring locks on multiple vnodes, the 376lock of parent directory must be acquired before the lock on the child 377directory. 378.Pp 379Vnode operations for a file system type generally should not be 380called directly from the kernel, but accessed indirectly through the 381high-level convenience functions discussed in 382.Xr vnsubr 9 . 383.Sh FUNCTIONS 384.Bl -tag -width compact 385.It Fn VOP_LOOKUP "dvp" "vpp" "cnp" 386Lookup a single pathname component in a given directory. 387The argument 388.Fa dvp 389is the locked vnode of the directory to search and 390.Fa cnp 391is the pathname component to be searched for. 392If the pathname component is found, the address of the resulting 393locked vnode is returned in 394.Fa vpp . 395The operation specified in 396.Em cnp-\*[Gt]cn_nameiop 397gives 398.Fn VOP_LOOKUP 399hints about the reason for requesting the lookup and uses it to cache 400file system type specific information in the vnode for subsequent 401operations. 402.Pp 403There are three types of lookups: ".", ".." (ISDOTDOT), and other. 404If the pathname component being searched for is ".", then 405.Fa dvp 406has an extra reference added to it and it is returned in 407.Fa *vpp . 408If the pathname component being search for is ".." (ISDOTDOT), 409.Fa dvp 410is unlocked, the ".." node is locked and then 411.Fa dvp 412is relocked if and only if LOCKPARENT and ISLASTCN is set in 413.Em cnp-\*[Gt]cn_flags . 414If LOCKPARENT or ISLASTCN is not set, 415.Fa dvp 416is returned unlocked on a successful lookup. 417This process preserves the protocol of always locking nodes from root 418downward and prevents deadlock. 419For other pathname components, 420.Fn VOP_LOOKUP 421checks the accessibility of the directory and searches the name cache 422for the pathname component. 423See 424.Xr namecache 9 . 425If the pathname is not found in the name cache, the directory is 426searched for the pathname. 427The resulting locked vnode is returned in 428.Fa vpp . 429If LOCKPARENT or ISLASTCN is not set, 430.Fa dvp 431is returned unlocked on a successful lookup. 432.Pp 433On failure 434.Fa *vpp 435is 436.Dv NULL , 437and 438.Fa *dvp 439is left locked. 440If there was an error relocking 441.Fa dvp 442(for instance in the ISDOTDOT case) the error is returned with 443PDIRUNLOCK set in 444.Em cnp-\*[Gt]cn_flags . 445This flag signals to the caller that 446.Fa dvp ' s 447lock state has changed. 448If the operation is successful 449.Fa *vpp 450is locked and zero is returned. 451Typically, if 452.Fa *vpp 453and 454.Fa dvp 455are the same vnode the caller will need to release twice (decrement 456the reference count) and unlock once. 457.It Fn VOP_CREATE "dvp" "vpp" "cnp" "vap" 458Create a new file in a given directory. 459The argument 460.Fa dvp 461is the locked vnode of the directory to create the new file in and 462.Fa cnp 463is the pathname component of the new file. 464The argument 465.Fa vap 466specifies the attributes that the new file should be created with. 467If the file is successfully created, the address of the resulting 468locked vnode is returned in 469.Fa vpp 470and zero is returned. 471Regardless of the return value, the directory vnode 472.Fa dvp 473will be unlocked on return. 474.Pp 475This function is called after 476.Fn VOP_LOOKUP 477when a file is being created. 478Normally, 479.Fn VOP_LOOKUP 480will have set the SAVENAME flag in 481.Em cnp-\*[Gt]cn_flags 482to keep the memory pointed to by 483.Em cnp-\*[Gt]cn_pnbuf 484valid. 485If an error is detected when creating the file, this memory is 486released. 487If the file is created successfully it will be released unless the 488SAVESTART flags in specified in 489.Em cnp-\*[Gt]cn_flags . 490.It Fn VOP_MKNOD "dvp" "vpp" "cnp" "vap" 491Make a new device-special file in a given directory. 492The argument 493.Fa dvp 494is the locked vnode of the directory to create the new device-special 495file in and 496.Fa cnp 497is the pathname component of the new device-special file. 498The argument 499.Fa vap 500specifies the attributes that the new device-special file should be 501created with. 502If the file is successfully created, the address of the resulting 503locked vnode is returned in 504.Fa vpp 505and zero is returned. 506.Pp 507This function is called after 508.Fn VOP_LOOKUP 509when a device-special file is being created. 510Normally, 511.Fn VOP_LOOKUP 512will have set the SAVENAME flag in 513.Em cnp-\*[Gt]cn_flags 514to keep the memory pointed to by 515.Em cnp-\*[Gt]cn_pnbuf 516valid. 517If an error is detected when creating the device-special file, 518this memory is released. 519If the device-special file is created successfully it will be released 520unless the SAVESTART flags in specified in 521.Em cnp-\*[Gt]cn_flags . 522.It Fn VOP_OPEN "vp" "mode" "cred" "l" 523Open a file. 524The argument 525.Fa vp 526is the vnode of the file to open and 527.Fa mode 528specifies the access mode required by the calling process. 529The calling process and its credentials are specified by 530.Fa l 531and 532.Fa cred 533respectively. 534The access mode is a set of flags, including FREAD, FWRITE, 535O_NONBLOCK, O_APPEND, etc. 536.Fn VOP_OPEN 537must be called before a file can be accessed by a thread. 538The vnode reference count is incremented. 539.Pp 540.Fn VOP_OPEN 541expects the vnode 542.Fa vp 543to be locked on entry and will leave it locked on return. 544If the operation is successful zero is returned, otherwise an 545appropriate error code is returned. 546.It Fn VOP_CLOSE "vp" "fflag" "cred" "l" 547Close a file. 548The argument 549.Fa vp 550is the vnode of the file to close and 551.Fa fflags 552specifies the access mode by the calling process. 553The calling process and its credentials are specified by 554.Fa l 555and 556.Fa cred 557respectively. 558.Fn VOP_CLOSE 559must be called after a file is finished with. 560.Pp 561.Fn VOP_CLOSE 562expects at least a reference to be associated with the vnode and does 563not care whether the vnode is locked. 564The lock and reference state is left unchanged on return. 565.It Fn VOP_ACCESS "vp" "mode" "cred" "l" 566Determine the accessibility (permissions) of the file against the 567specified credentials. 568The argument 569.Fa vp 570is the vnode of the file to check, 571.Fa mode 572is the type of access required, 573.Fa cred 574contains the user credentials to check and 575.Fa l 576is the process which is checking the credentials. 577The argument 578.Fa mode 579is a mask which can contain VREAD, VWRITE or VEXEC. 580If the file is accessible in the specified way, zero is returned, 581otherwise an appropriate error code is returned. 582.Pp 583The vnode 584.Fa vp 585will be locked on entry and should remain locked on return. 586.It Fn VOP_GETATTR "vp" "vap" "cred" "l" 587Get specific vnode attributes on a file. 588The argument 589.Fa vp 590is the vnode of the file to get the attributes for. 591The arguments 592.Fa l 593and 594.Fa cred 595specifies the calling process and its credentials respectively. 596.Fn VOP_GETATTR 597uses the file system type specific data object 598.Em vp-\*[Gt]v_data 599to reference the underlying file attributes. 600Attributes associated with the file are collected by setting the 601required attribute bits in 602.Em vap-\*[Gt]va_mask . 603The attributes are returned in 604.Fa vap . 605Attributes which are not available are set to the value VNOVAL. 606.Pp 607For more information on vnode attributes see 608.Xr vattr 9 . 609.It Fn VOP_SETATTR "vp" "vap" "cred" "l" 610Set specific vnode attributes on a file. 611The argument 612.Fa vp 613is the locked vnode of the file to set the attributes for. 614The arguments 615.Fa l 616and 617.Fa cred 618specifies the calling process and its credentials respectively. 619.Fn VOP_SETATTR 620uses the file system type specific data object 621.Em vp-\*[Gt]v_data 622to reference the underlying file attributes. 623The new attributes are defined in 624.Fa vap . 625Attributes associated with the file are set by setting the required 626attribute bits in 627.Em vap-\*[Gt]va_mask . 628Attributes which are not being modified by 629.Fn VOP_SETATTR 630should be set to the value VNOVAL. 631If the operation is successful zero is returned, otherwise an 632appropriate error is returned. 633.Pp 634For more information on vnode attributes see 635.Xr vattr 9 . 636.It Fn VOP_READ "vp" "uio" "ioflag" "cred" 637Read the contents of a file. 638The argument 639.Fa vp 640is the vnode of the file to read from, 641.Fa uio 642is the location to read the data into, 643.Fa ioflag 644is a set of flags and 645.Fa cred 646are the credentials of the calling process. 647.Pp 648The 649.Fa ioflag 650argument is used to give directives and hints to the file system. 651When attempting a read, the high 16 bits are used to provide a 652read-ahead hint (in unit of file system blocks) that the file system 653should attempt. 654The low 16 bits are a bit mask which can contain the following flags: 655.Pp 656.Bl -tag -offset indent -width IO_ALTSEMANTICS -compact 657.It IO_UNIT 658do I/O as atomic unit 659.It IO_APPEND 660append write to end 661.It IO_SYNC 662sync I/O file integrity completion 663.It IO_NODELOCKED 664underlying node already locked 665.It IO_NDELAY 666FNDELAY flag set in file table 667.It IO_DSYNC 668sync I/O data integrity completion 669.It IO_ALTSEMANTICS 670use alternate I/O semantics 671.It IO_NORMAL 672operate on regular data 673.It IO_EXT 674operate on extended attributes 675.El 676.Pp 677Zero is returned on success, otherwise an error is returned. 678The vnode should be locked on entry and remains locked on exit. 679.It Fn VOP_WRITE "vp" "uio" "ioflag" "cred" 680Write to a file. 681The argument 682.Fa vp 683is the vnode of the file to write to, 684.Fa uio 685is the location of the data to write, 686.Fa ioflag 687is a set of flags and 688.Fa cred 689are the credentials of the calling process. 690.Pp 691The 692.Fa ioflag 693argument is used to give directives and hints to the file system. 694The low 16 bits are a bit mask which can contain the same flags as 695.Fn VOP_READ . 696.Pp 697Zero is returned on success, otherwise an error is returned. 698The vnode should be locked on entry and remains locked on exit. 699.It Fn VOP_IOCTL "vp" "command" "data" "fflag" "cred" "l" 700Perform device-specific I/O. 701The argument 702.Fa vp 703is the locked vnode of the file, normally representing a device. 704The argument 705.Fa command 706specifies the device-specific operation to perform and 707.Fa cnp 708provides extra data for the specified operation. 709The argument 710.Fa fflags 711is a set of flags. 712The argument 713.Fa cred 714is the caller's credentials and 715.Fa l 716the calling process. 717If the operation is successful, zero is 718returned, otherwise an appropriate error code is returned. 719.Pp 720Most file systems do not supply a function for 721.Fn VOP_IOCTL . 722This function implements the 723.Xr ioctl 2 724system call. 725.It Fn VOP_FCNTL "vp" "command" "data" "fflag" "cred" "l" 726Perform file control. 727The argument 728.Fa vp 729is the locked vnode of the file. 730The argument 731.Fa command 732specifies the operation to perform and 733.Fa cnp 734provides extra data for the specified operation. 735The argument 736.Fa fflags 737is a set of flags. 738The argument 739.Fa cred 740is the caller's credentials and 741.Fa l 742the calling process. 743If the operation is successful, zero is returned, otherwise an 744appropriate error code is returned. 745.It Fn VOP_POLL "vp" "events" "l" 746Test if a poll event has occurred. 747The argument 748.Fa vp 749is the vnode of the file to poll and 750.Fa l 751is the calling process. 752It returns any events of interest as specified by 753.Fa events 754that may have occurred for the file. 755The argument 756.Fa events 757is a set of flags as specified by 758.Xr poll 2 . 759If the operation is successful zero is returned, otherwise an 760appropriate error code is returned. 761.It Fn VOP_KQFILTER "vp" "kn" 762Register a knote 763.Fa kn 764with the vnode 765.Fa vn . 766If the operation is successful zero is returned, otherwise an 767appropriate error code is returned. 768.It Fn VOP_REVOKE "vp" "flags" 769Eliminate all activity associated with the vnode 770.Fa vp . 771The argument 772.Fa flags 773is a set of flags. 774If REVOKEALL is set in 775.Fa flags 776all vnodes aliased to the vnode 777.Fa vp 778are also eliminated. 779If the operation is successful zero is returned, otherwise an 780appropriate error is returned. 781.It Fn VOP_MMAP "vp" "fflags" "cred" "l" 782Map file into user address space. 783The argument 784.Fa vp 785is the locked vnode of the file to map into an address space. 786The argument 787.Fa fflags 788is a set of flags. 789The argument 790.Fa cred 791is the caller's credentials and 792.Fa l 793the calling process requesting the map. 794If the operation is successful, zero is returned, otherwise an 795appropriate error code is returned. 796.Pp 797Most file systems do not supply a function for 798.Fn VOP_MMAP . 799This function implements the 800.Xr mmap 2 801system call. 802.It Fn VOP_FSYNC "vp" "cred" "flags" "offlo" "offhi" "l" 803Flush pending data buffers for a file to disk. 804The argument 805.Fa vp 806is the locked vnode of the file for flush. 807The argument 808.Fa cred 809is the caller's credentials and 810.Fa l 811the calling process. 812The argument 813.Fa flags 814is a set of flags. 815If FSYNC_WAIT is specified in 816.Fa flags , 817the function should wait for I/O to complete before returning. 818The argument 819.Fa offlo 820and 821.Fa offhi 822specify the range of file to flush. 823If the operation is successful zero is returned, otherwise an 824appropriate error code is returned. 825.Pp 826This function implements the 827.Xr sync 2 828and 829.Xr fsync 2 830system calls. 831.It Fn VOP_SEEK "vp" "oldoff" "newoff" "cred" 832Test if the file is seekable for the specified offset 833.Fa newoff . 834The argument 835.Fa vp 836is the locked vnode of the file to test. 837For most filesystems this function simply tests if 838.Fa newoff 839is valid. 840If the specified 841.Fa newoff 842is less than zero, the function returns error code EINVAL. 843.It Fn VOP_REMOVE "dvp" "vp" "cnp" 844Remove a file. 845The argument 846.Fa dvp 847is the locked vnode of the directory to remove the file from and 848.Fa vp 849is the locked vnode of the file to remove. 850The argument 851.Fa cnp 852is the pathname component about the file to remove. 853If the operation is successful zero is returned, otherwise an 854appropriate error code is returned. 855Both 856.Fa dvp 857and 858.Fa vp 859should be locked on entry and remain locked on return. 860.It Fn VOP_LINK "dvp" "vp" "cnp" 861Link to a file. 862The argument 863.Fa dvp 864is the locked node of the directory to create the new link and 865.Fa vp 866is the vnode of the file to be linked. 867The argument 868.Fa cnp 869is the pathname component of the new link. 870If the operation is successful zero is returned, otherwise an error 871code is returned. 872The directory vnode 873.Fa dvp 874should be locked on entry and will be released and unlocked on return. 875The vnode 876.Fa vp 877should not be locked on entry and will remain unlocked on return. 878.It Fn VOP_RENAME "fdvp" "fvp" "fcnp" "tdvp" "tvp" "tcnp" 879Rename a file. 880The argument 881.Fa fdvp 882is the vnode of the old parent directory containing in the file to be 883renamed and 884.Fa fvp 885is the vnode of the file to be renamed. 886The argument 887.Fa fcnp 888is the pathname component about the file to be remained. 889The argument 890.Fa tdvp 891is the vnode of the new directory of the target file and 892.Fa tvp 893is the vnode of the target file (if it exists). 894The argument 895.Fa tcnp 896is the pathname component about the file's new name. 897If the operation is successful zero is returned, otherwise and error 898code is returned. 899.Pp 900The source directory and file vnodes should be unlocked and their 901reference counts should be incremented before entry. 902The target directory and file vnodes should both be locked on entry. 903.Fn VOP_RENAME 904updates the reference counts prior to returning. 905.It Fn VOP_MKDIR "dvp" "vpp" "cnp" "vap" 906Make a new directory in a given directory. 907The argument 908.Fa dvp 909is the locked vnode of the directory to create the new directory in and 910.Fa cnp 911is the pathname component of the new directory. 912The argument 913.Fa vap 914specifies the attributes that the new directory should be created 915with. 916If the file is successfully created, the address of the resulting 917locked vnode is returned in 918.Fa vpp 919and zero is returned. 920.Pp 921This function is called after 922.Fn VOP_LOOKUP 923when a directory is being created. 924Normally, 925.Fn VOP_LOOKUP 926will have set the SAVENAME flag in 927.Em cnp-\*[Gt]cn_flags 928to keep the memory pointed to by 929.Em cnp-\*[Gt]cn_pnbuf 930valid. 931If an error is detected when creating the directory, this memory is 932released. 933If the directory is created successfully it will be released unless 934the SAVESTART flags in specified in 935.Em cnp-\*[Gt]cn_flags . 936.It Fn VOP_RMDIR "dvp" "vp" "cnp" 937Remove a directory in a given directory. 938The argument 939.Fa dvp 940is the locked vnode of the directory to remove the directory from and 941.Fa vp 942is the locked vnode of the directory to remove. 943The argument 944.Fa cnp 945is the pathname component of the directory. 946Zero is returned on success, otherwise an error code is returned. 947Both 948.Fa dvp 949and 950.Fa vp 951should be locked on entry and will be released and unlocked on return. 952.It Fn VOP_SYMLINK "dvp" "vpp" "cnp" "vap" "target" 953Create a symbolic link in a given directory. 954The argument 955.Fa dvp 956is the locked vnode of the directory to create the symbolic link in 957and 958.Fa cnp 959is the pathname component of the symbolic link. 960The argument 961.Fa vap 962specifies the attributes that the symbolic link should be created 963with and 964.Fa target 965specifies the pathname of the target of the symbolic link. 966If the symbolic link is successfully created, the address of the 967resulting locked vnode is returned in 968.Fa vpp 969and zero is returned. 970.Pp 971This function is called after 972.Fn VOP_LOOKUP 973when a symbolic link is being created. 974Normally, 975.Fn VOP_LOOKUP 976will have set the SAVENAME flag in 977.Em cnp-\*[Gt]cn_flags 978to keep the memory pointed to by 979.Em cnp-\*[Gt]cn_pnbuf 980valid. 981If an error is detected when creating the symbolic link, this memory 982is released. 983If the symbolic link is created successfully it will be released 984unless the SAVESTART flags in specified in 985.Em cnp-\*[Gt]cn_flags . 986.It Fn VOP_READDIR "vp" "uio" "cred" "eofflag" "cookies" "ncookies" 987Read directory entry. 988The argument 989.Fa vp 990is the vnode of the directory to read the contents of and 991.Fa uio 992is the destination location to read the contents into. 993The argument 994.Fa cred 995is the caller's credentials. 996The argument 997.Fa eofflag 998is the pointer to a flag which is set by 999.Fn VOP_READDIR 1000to indicate an end-of-file condition. 1001If 1002.Fa eofflag 1003is 1004.Dv NULL , 1005the end-of-file condition is not returned. 1006The arguments 1007.Fa cookies 1008and 1009.Fa ncookies 1010specify the addresses for the list and number of directory seek 1011cookies generated for NFS. 1012Both 1013.Fa cookies 1014and 1015.Fa ncookies 1016should be 1017.Dv NULL 1018if they aren't required to be returned by 1019.Fn VOP_READDIR . 1020The directory contents are read into struct dirent structures. 1021If the operation is successful zero is returned, otherwise an 1022appropriate error code is returned. 1023.Pp 1024The directory should be locked on entry and will remain locked on 1025return. 1026.Pp 1027If 1028.Fn VOP_READDIR 1029is called from the NFS server, the extra arguments 1030.Fa eofflag , 1031.Fa ncookies 1032and 1033.Fa cookies 1034are used. 1035The value of 1036.Fa *eofflag 1037will be set to TRUE if the end of the directory is reached while 1038reading. 1039The directory seek cookies are returned to the NFS client and may be 1040used later to restart a directory read part way through the directory. 1041There should be one cookie returned per directory entry. 1042The value of the cookie should be the offset within the directory 1043where the on-disk version of the appropriate directory entry starts. 1044.It Fn VOP_READLINK "vp" "uio" "cred" 1045Read the contents of a symbolic link. 1046The argument 1047.Fa vp 1048is the locked vnode of the symlink and 1049.Fa uio 1050is the destination location to read the contents into. 1051The argument 1052.Fa cred 1053is the credentials of the caller. 1054If the operation is successful zero is returned, otherwise an error 1055code is returned. 1056.Pp 1057The vnode should be locked on entry and will remain locked on return. 1058.It Fn VOP_ABORTOP "dvp" "cnp" 1059Abort pending operation on vnode 1060.Fa dvp . 1061This operation is rarely implemented in file systems. 1062.It Fn VOP_INACTIVE "vp" "l" 1063Release the inactive vnode. 1064.Fn VOP_INACTIVE 1065is called when the kernel is no longer using the vnode. 1066This may be because the reference count reaches zero or it may be that 1067the file system is being forcibly unmounted while there are open 1068files. 1069It can be used to reclaim space for open but deleted files. 1070The argument 1071.Fa vp 1072is the locked vnode to be released. 1073The argument 1074.Fa l 1075is the calling process. 1076If the operation is successful zero is returned, otherwise an 1077appropriate error code is returned. 1078The vnode 1079.Fa vp 1080must be locked on entry, and will be unlocked on return. 1081.It Fn VOP_RECLAIM "vp" "l" 1082Reclaim the vnode for another file system. 1083.Fn VOP_RECLAIM 1084is called when a vnode is being reused for a different file system. 1085Any file system specific resources associated with the vnode should be 1086freed. 1087The argument 1088.Fa vp 1089is the locked vnode to be reclaimed. 1090The argument 1091.Fa l 1092is the calling process. 1093If the operation is successful zero is returned, otherwise an 1094appropriate error code is returned. 1095The vnode 1096.Fa vp 1097should not be locked on entry, and will remain unlocked on return. 1098.It Fn VOP_LOCK "vp" "flags" 1099Sleep until vnode lock is free. 1100The argument 1101.Fa vp 1102is the vnode of the file to be locked. 1103The argument 1104.Fa flags 1105is a set of 1106.Xr lockmgr 9 1107flags. 1108If the operation is successful zero is returned, otherwise an 1109appropriate error code is returned. 1110.Fn VOP_LOCK 1111is used to serialise access to the file system such as to present two 1112writes to the same file from happening at the same time. 1113Kernel code should use 1114.Xr vn_lock 9 1115to lock a vnode rather than calling 1116.Fn VOP_LOCK 1117directly. 1118.It Fn VOP_UNLOCK "vp" "flags" 1119Wake up process sleeping on lock. 1120The argument 1121.Fa vp 1122is the vnode of the file to be unlocked. 1123The argument 1124.Fa flags 1125is a set of 1126.Xr lockmgr 9 1127flags. 1128If the operation is successful zero is returned, otherwise an 1129appropriate error code is returned. 1130.Fn VOP_UNLOCK 1131is used to serialise access to the file system such as to present two 1132writes to the same file from happening at the same time. 1133.It Fn VOP_ISLOCKED "vp" 1134Test if the vnode 1135.Fa vp 1136is locked. 1137A non-zero values is returned if the vnode is not locked, otherwise 1138zero is returned. 1139.It Fn VOP_BMAP "vp" "bn" "vpp" "bnp" "runp" 1140Convert the logical block number 1141.Fa bn 1142of a file specified by vnode 1143.Fa vp 1144to its physical block number on the disk. 1145If 1146.Fa vpp 1147is not 1148.Dv NULL , 1149the vnode of the device vnode for the file system is 1150returned in the address specified by 1151.Fa vpp . 1152If 1153.Fa runp 1154is not 1155.Dv NULL , 1156the maximum blocksize is returned in the address specified by 1157.Fa runp . 1158.It Fn VOP_PRINT "vp" 1159Print debugging information. 1160The argument 1161.Fa vp 1162is the vnode to print. 1163If the operation is successful zero is returned, otherwise an 1164appropriate error code is returned. 1165.It Fn VOP_PATHCONF "vp" "name" "retval" 1166Implement POSIX 1167.Xr pathconf 2 1168and 1169.Xr fpathconf 2 1170support. 1171The argument 1172.Fa vp 1173is the locked vnode to get information about. 1174The argument 1175.Fa name 1176specified the type of information to return. 1177The information is returned in the address specified by 1178.Fa retval . 1179Valid values for 1180.Fa name 1181are: 1182.Pp 1183.Bl -tag -offset indent -width _PC_CHOWN_RESTRICTED -compact 1184.It _PC_LINK_MAX 1185return the maximum number of links to a file 1186.It _PC_NAME_MAX 1187return the maximum number of bytes in a file name 1188.It _PC_PATH_MAX 1189return the maximum number of bytes in a pathname 1190.It _PC_PIPE_BUF 1191return the maximum number of bytes which will be written atomically to 1192a pipe 1193.It _PC_CHOWN_RESTRICTED 1194return 1 if appropriate privileges are required for the 1195.Xr chown 2 1196system call, otherwise zero 1197.It _PC_NO_TRUNC 1198return if file names longer than KERN_NAME_MAX are truncated 1199.El 1200.Pp 1201If 1202.Fa name 1203is recognised, 1204.Fa *retval 1205is set to the specified value and zero is returned, otherwise an 1206appropriate error is returned. 1207.It Fn VOP_ADVLOCK "vp" "id" "op" "fl" "flags" 1208Manipulate Advisory record locks on a vnode. 1209The argument 1210.Fa vp 1211is the vnode on which locks are manipulated. 1212The argument 1213.Fa id 1214is the id token which is changing the lock and 1215.Fa op 1216is the 1217.Xr fcntl 2 1218operation to perform. 1219Valid values are: 1220.Pp 1221.Bl -tag -offset indent -width F_UNLCK -compact 1222.It F_SETLK 1223set lock 1224.It F_GETLK 1225get the first conflicted lock 1226.It F_UNLCK 1227clear lock 1228.El 1229.Pp 1230The argument 1231.Fa fl 1232is a description of the lock. 1233In the case of 1234.Dv SEEK_CUR , 1235The caller should add the current file offset to 1236fl-\*[Gt]l_start beforehand. 1237.Fn VOP_ADVLOCK 1238treats 1239.Dv SEEK_CUR 1240as 1241.Dv SEEK_SET . 1242.Pp 1243The argument 1244.Fa flags 1245is the set of flags. 1246Valid values are: 1247.Pp 1248.Bl -tag -offset indent -width F_FLOCK -compact 1249.It F_WAIT 1250wait until lock is granted 1251.It F_FLOCK 1252use 1253.Xr flock 2 1254semantics for lock 1255.It F_POSIX 1256use POSIX semantics for lock 1257.El 1258.Pp 1259If the operation is successful zero is returned, otherwise an 1260appropriate error is returned. 1261.It Fn VOP_LEASE "vp" "l" "cred" "flags" 1262Validate vnode credentials and operation type. 1263The argument 1264.Fa vp 1265is the locked vnode of the file to validate credentials 1266.Fa cred . 1267The argument 1268.Fa l 1269specifies the calling process and 1270.Fa flags 1271specifies the operation flags. 1272If the operation is successful zero is returned, otherwise an 1273appropriate error code is returned. 1274The vnode must be locked on entry and remains locked on return. 1275.It Fn VOP_WHITEOUT "dvp" "cnp" "flags" 1276Whiteout pathname component in directory with vnode 1277.Fa dvp . 1278The argument 1279.Fa cnp 1280specifies the pathname component to whiteout. 1281.It Fn VOP_GETPAGES "vp" "offset" "m" "count" "centeridx" "access_type" "advice" "flags" 1282Read VM pages from file. 1283The argument 1284.Fa vp 1285is the locked vnode to read the VM pages from. 1286The argument 1287.Fa offset 1288is offset in the file to start accessing and 1289.Fa m 1290is an array of VM pages. 1291The argument 1292.Fa count 1293points a variable that specifies the number of pages to read. 1294If the operation is successful zero is returned, otherwise an 1295appropriate error code is returned. 1296If PGO_LOCKED is specified in 1297.Em flags , 1298.Fn VOP_GETPAGES 1299might return less pages than requested. 1300In that case, the variable pointed to by 1301.Em count 1302will be updated. 1303.Pp 1304This function is primarily used by the page-fault handing mechanism. 1305.It Fn VOP_PUTPAGES "vp" "offset" "len" "flags" 1306Write modified (dirty) VM pages to file. 1307The argument 1308.Fa vp 1309is the locked vnode to write the VM pages to and 1310.Fa offset 1311and 1312.Fa len 1313specifies the range of VM pages to write. 1314There seems to be some confusion in the code whether 1315.Fa offset 1316and 1317.Fa len 1318specify the start and length of the VM pages for the start and end of 1319the VM pages. 1320The argument 1321.Fa flags 1322specifies whether the pages should be written asynchronously and also 1323whether they should be marked invalid one the write back operation has 1324completed. 1325If the operation is successful zero is returned, otherwise an 1326appropriate error code is returned. 1327.Pp 1328The function is primarily used by the pageout handling mechanism. 1329.It Fn VOP_STRATEGY "vp" "bp" 1330Read/write a file system buffer. 1331The argument 1332.Fa vp 1333is the vnode to read/write to. 1334The argument 1335.Fa bp 1336is the buffer to be read or written. 1337.Fn VOP_STRATEGY 1338will either read or write data to the file depending on the value of 1339.Em bp-\*[Gt]b_flags . 1340If the operation is successful zero is returned, otherwise an 1341appropriate error code is returned. 1342.It Fn VOP_BWRITE "bp" 1343Write a file system buffer. 1344The argument 1345.Fa bp 1346specifies the buffer to be written. 1347If the operation is successful zero is returned, otherwise an 1348appropriate error code is returned. 1349.It Fn VOP_GETEXTATTR "vp" "attrnamespace" "name" "uio" "size" "cred" "l" 1350Get an extended attribute. 1351The argument 1352.Fa vp 1353is the locked vnode of the file or directory from which to retrieve the 1354attribute. 1355The argument 1356.Fa attrnamespace 1357specifies the extended attribute namespace. 1358The argument 1359.Fa name 1360is a nul-terminated character string naming the attribute to retrieve. 1361The argument 1362.Fa uio , 1363if not 1364.Dv NULL , 1365specifies where the extended attribute value is to be written. 1366The argument 1367.Fa size , 1368if not 1369.Dv NULL , 1370will contain the number of bytes required to read all of 1371the attribute data upon return. 1372In most cases, 1373.Fa uio 1374will be 1375.Dv NULL 1376when 1377.Fa size 1378is not, and vice versa. 1379The argument 1380.Fa cred 1381specifies the user credentials to use when authorizing the request. 1382The argument 1383.Fa l 1384specifies the process requesting the extended attribute. 1385.It Fn VOP_SETEXTATTR "vp" "attrnamespace" "name" "uio" "cred" "l" 1386Set an extended attribute. 1387The argument 1388.Fa vp 1389is the locked vnode of the file or directory to which to store the 1390attribute. 1391The argument 1392.Fa namespace 1393specifies the extended attribute namespace. 1394The argument 1395.Fa name 1396is a nul-terminated character string naming the attribute to store. 1397The argument 1398.Fa uio 1399specifies the source of the extended attribute data. 1400The argument 1401.Fa cred 1402specifies the user credentials to use when authorizing the request. 1403The argument 1404.Fa l 1405specifies the process setting the extended attribute. 1406.It Fn VOP_LISTEXTATTR "vp" "attrnamespace" "uio" "size" "cred" "l" 1407Retrieve the list of extended attributes. 1408The argument 1409.Fa vp 1410is the locked vnode of the file or directory whose attributes are to be listed. 1411The argument 1412.Fa attrnamespace 1413specifies the extended attribute namespace. 1414The argument 1415.Fa uio , 1416if not 1417.Dv NULL , 1418specifies where the extended attribute list is to be written. 1419The argument 1420.Fa size , 1421if not 1422.Dv NULL , 1423will contain the number of bytes required to read all of 1424the attribute names upon return. 1425In most cases, 1426.Fa uio 1427will be 1428.Dv NULL 1429when 1430.Fa size 1431is not, and vice versa. 1432The argument 1433.Fa cred 1434specifies the user credentials to use when authorizing the request. 1435The argument 1436.Fa l 1437specifies the process requesting the extended attribute list. 1438.El 1439.Sh ERRORS 1440.Bl -tag -width Er 1441.It Bq Er ENOATTR 1442The requested attribute is not defined for this vnode. 1443.It Bq Er ENOTDIR 1444The vnode does not represent a directory. 1445.It Bq Er ENOENT 1446The component was not found in the directory. 1447.It Bq Er ENOSPC 1448The file system is full. 1449.It Bq Er EDQUOT 1450Quota exceeded. 1451.It Bq Er EACCES 1452Access for the specified operation is denied. 1453.It Bq Er EJUSTRETURN 1454A CREATE or RENAME operation would be successful. 1455.It Bq Er EPERM 1456an attempt was made to change an immutable file 1457.It Bq Er ENOTEMPTY 1458attempt to remove a directory which is not empty 1459.It Bq Er EINVAL 1460attempt to read from an illegal offset in the directory; unrecognised 1461input 1462.It Bq Er EIO 1463a read error occurred while reading the directory or reading the 1464contents of a symbolic link 1465.It Bq Er EROFS 1466the filesystem is read-only 1467.El 1468.Sh SEE ALSO 1469.Xr extattr 9 , 1470.Xr intro 9 , 1471.Xr lock 9 , 1472.Xr namei 9 , 1473.Xr vattr 9 , 1474.Xr vfs 9 , 1475.Xr vfsops 9 , 1476.Xr vnode 9 1477.Sh HISTORY 1478The vnode operations vector, its functions and the corresponding 1479macros appeared in 1480.Bx 4.3 . 1481