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