From 253e67c8b3a72b3a4757fdbc5845297628db0a4a Mon Sep 17 00:00:00 2001 From: Jacob McDonnell Date: Sat, 25 Apr 2026 19:55:15 -0400 Subject: docs: Added All NetBSD Manuals --- static/netbsd/man9/vnodeops.9 3.html | 1441 ++++++++++++++++++++++++++++++++++ 1 file changed, 1441 insertions(+) create mode 100644 static/netbsd/man9/vnodeops.9 3.html (limited to 'static/netbsd/man9/vnodeops.9 3.html') diff --git a/static/netbsd/man9/vnodeops.9 3.html b/static/netbsd/man9/vnodeops.9 3.html new file mode 100644 index 00000000..17e8c6f5 --- /dev/null +++ b/static/netbsd/man9/vnodeops.9 3.html @@ -0,0 +1,1441 @@ + + + + + + +
VNODEOPS(9)Kernel Developer's ManualVNODEOPS(9)
+
+
+

+

vnodeops, + VOP_LOOKUP, VOP_CREATE, + VOP_MKNOD, VOP_OPEN, + VOP_CLOSE, VOP_ACCESS, + VOP_GETATTR, VOP_SETATTR, + VOP_READ, VOP_WRITE, + VOP_FALLOCATE, VOP_FDISCARD, + VOP_IOCTL, VOP_FCNTL, + VOP_POLL, VOP_KQFILTER, + VOP_REVOKE, VOP_MMAP, + VOP_FSYNC, VOP_SEEK, + VOP_REMOVE, VOP_LINK, + VOP_RENAME, VOP_MKDIR, + VOP_RMDIR, VOP_SYMLINK, + VOP_READDIR, VOP_READLINK, + VOP_ABORTOP, VOP_INACTIVE, + VOP_RECLAIM, VOP_LOCK, + VOP_UNLOCK, VOP_ISLOCKED, + VOP_BMAP, VOP_PRINT, + VOP_PATHCONF, VOP_ADVLOCK, + VOP_WHITEOUT, VOP_GETPAGES, + VOP_PUTPAGES, VOP_STRATEGY, + VOP_BWRITE, VOP_GETEXTATTR, + VOP_SETEXTATTR, + VOP_LISTEXTATTR, + VOP_DELETEEXTATTRvnode + operations

+
+
+

+

#include + <sys/param.h> +
+ #include <sys/buf.h> +
+ #include <sys/dirent.h> +
+ #include <sys/vnode.h> +
+ #include <sys/mount.h> +
+ #include <sys/namei.h> +
+ #include <sys/unistd.h> +
+ #include <sys/fcntl.h> +
+ #include <sys/lockf.h> +
+ #include <sys/extattr.h>

+

int +
+ VOP_LOOKUP(struct + vnode *dvp, struct vnode + **vpp, struct + componentname *cnp);

+

int +
+ VOP_CREATE(struct + vnode *dvp, struct vnode + **vpp, struct + componentname *cnp, + struct vattr *vap);

+

int +
+ VOP_MKNOD(struct + vnode *dvp, struct vnode + **vpp, struct + componentname *cnp, + struct vattr *vap);

+

int +
+ VOP_OPEN(struct + vnode *vp, int + mode, kauth_cred_t + cred);

+

int +
+ VOP_CLOSE(struct + vnode *vp, int + fflag, kauth_cred_t + cred);

+

int +
+ VOP_ACCESS(struct + vnode *vp, int + mode, kauth_cred_t + cred);

+

int +
+ VOP_GETATTR(struct + vnode *vp, struct vattr + *vap, kauth_cred_t + cred);

+

int +
+ VOP_SETATTR(struct + vnode *vp, struct vattr + *vap, kauth_cred_t + cred);

+

int +
+ VOP_READ(struct + vnode *vp, struct uio + *uio, int ioflag, + kauth_cred_t cred);

+

int +
+ VOP_WRITE(struct + vnode *vp, struct uio + *uio, int ioflag, + kauth_cred_t cred);

+

int +
+ VOP_FALLOCATE(struct + vnode *vp, off_t + pos, off_t + len);

+

int +
+ VOP_FDISCARD(struct + vnode *vp, off_t + pos, off_t + len);

+

int +
+ VOP_IOCTL(struct + vnode *vp, u_long + command, void + *data, int fflag, + kauth_cred_t cred);

+

int +
+ VOP_FCNTL(struct + vnode *vp, u_int + command, void + *data, int fflag, + kauth_cred_t cred);

+

int +
+ VOP_POLL(struct + vnode *vp, int + events);

+

int +
+ VOP_KQFILTER(struct + vnode *vp, struct knote + *kn);

+

int +
+ VOP_REVOKE(struct + vnode *vp, int + flags);

+

int +
+ VOP_MMAP(struct + vnode *vp, vm_prot_t + prot, kauth_cred_t + cred);

+

int +
+ VOP_FSYNC(struct + vnode *vp, kauth_cred_t + cred, int flags, + off_t offlo, + off_t offhi);

+

int +
+ VOP_SEEK(struct + vnode *vp, off_t + oldoff, off_t + newoff, kauth_cred_t + cred);

+

int +
+ VOP_REMOVE(struct + vnode *dvp, struct vnode + *vp, struct componentname + *cnp);

+

int +
+ VOP_LINK(struct + vnode *dvp, struct vnode + *vp, struct componentname + *cnp);

+

int +
+ VOP_RENAME(struct + vnode *fdvp, struct vnode + *fvp, struct + componentname *fcnp, + struct vnode *tdvp, + struct vnode *tvp, + struct componentname + *tcnp);

+

int +
+ VOP_MKDIR(struct + vnode *dvp, struct vnode + **vpp, struct + componentname *cnp, + struct vattr *vap);

+

int +
+ VOP_RMDIR(struct + vnode *dvp, struct vnode + *vp, struct componentname + *cnp);

+

int +
+ VOP_SYMLINK(struct + vnode *dvp, struct vnode + **vpp, struct + componentname *cnp, + struct vattr *vap, + char *target);

+

int +
+ VOP_READDIR(struct + vnode *vp, struct uio + *uio, kauth_cred_t + cred, int *eofflag, + off_t **cookies, + int *ncookies);

+

int +
+ VOP_READLINK(struct + vnode *vp, struct uio + *uio, kauth_cred_t + cred);

+

int +
+ VOP_ABORTOP(struct + vnode *dvp, struct + componentname *cnp);

+

int +
+ VOP_INACTIVE(struct + vnode *vp);

+

int +
+ VOP_RECLAIM(struct + vnode *vp);

+

int +
+ VOP_LOCK(struct + vnode *vp, int + flags);

+

int +
+ VOP_UNLOCK(struct + vnode *vp);

+

int +
+ VOP_ISLOCKED(struct + vnode *vp);

+

int +
+ VOP_BMAP(struct + vnode *vp, daddr_t + bn, struct vnode + **vpp, daddr_t + *bnp, int + *runp);

+

int +
+ VOP_PRINT(struct + vnode *vp);

+

int +
+ VOP_PATHCONF(struct + vnode *vp, int + name, register_t + *retval);

+

int +
+ VOP_ADVLOCK(struct + vnode *vp, void + *id, int op, + struct flock *fl, + int flags);

+

int +
+ VOP_WHITEOUT(struct + vnode *dvp, struct + componentname *cnp, int + flags);

+

int +
+ VOP_GETPAGES(struct + vnode *vp, voff_t + offset, struct vm_page + **m, int *count, + int centeridx, + vm_prot_t access_type, + int advice, + int flags);

+

int +
+ VOP_PUTPAGES(struct + vnode *vp, voff_t + offlo, voff_t + offhi, int + flags);

+

int +
+ VOP_STRATEGY(struct + vnode *vp, struct buf + *bp);

+

int +
+ VOP_BWRITE(struct + vnode *vp, struct buf + *bp);

+

int +
+ VOP_GETEXTATTR(struct + vnode *vp, int + attrnamespace, const char + *name, struct uio + *uio, size_t *size, + kauth_cred_t cred);

+

int +
+ VOP_SETEXTATTR(struct + vnode *vp, int + attrnamespace, const char + *name, struct uio + *uio, kauth_cred_t + cred);

+

int +
+ VOP_LISTEXTATTR(struct + vnode *vp, int + attrnamespace, struct uio + *uio, size_t *size, + kauth_cred_t cred);

+

int +
+ VOP_DELETEEXTATTR(struct + vnode *vp, int + attrnamespace, const char + *name, kauth_cred_t + cred);

+

Not all header files are required for each function.

+
+
+

+

The vnode operations vector describes what operations can be done + to the file associated with the vnode. The system maintains one vnode + operations vector for each file system type configured into the kernel. The + vnode operations vector contains a pointer to a function for each operation + supported by the file system. Many of the functions described in the vnode + operations vector are closely related to their corresponding system calls. + In most cases, they are called as a result of the system call associated + with the operation being invoked.

+

Functions in the vnode operations vector are invoked using + specialized macros. The following table gives a summary of the + operations.

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VOP_LOOKUPLookup file name in name cache
VOP_CREATECreate a new file
VOP_MKNODMake a new device
VOP_OPENOpen a file
VOP_CLOSEClose a file
VOP_ACCESSDetermine file accessibility
VOP_GETATTRGet file attributes
VOP_SETATTRSet file attributes
VOP_READRead from a file
VOP_WRITEWrite to a file
VOP_FALLOCATEAllocate backing for a file
VOP_FDISCARDDiscard backing for a file
VOP_IOCTLPerform device-specific I/O
VOP_FCNTLPerform file control
VOP_POLLTest if poll event has occurred
VOP_KQFILTERRegister a knote
VOP_REVOKEEliminate vnode activity
VOP_MMAPMap file into user address space
VOP_FSYNCFlush pending data to disk
VOP_SEEKTest if file is seekable
VOP_REMOVERemove a file
VOP_LINKLink a file
VOP_RENAMERename a file
VOP_MKDIRMake a new directory
VOP_RMDIRRemove a directory
VOP_SYMLINKCreate a symbolic link
VOP_READDIRRead directory entry
VOP_READLINKRead contents of a symlink
VOP_ABORTOPAbort pending operation
VOP_INACTIVERelease the inactive vnode
VOP_RECLAIMReclaim vnode for another file
VOP_LOCKSleep until vnode lock is free
VOP_UNLOCKWake up process sleeping on lock
VOP_ISLOCKEDTest if vnode is locked
VOP_BMAPLogical block number conversion
VOP_PRINTPrint debugging information
VOP_PATHCONFReturn POSIX pathconf data
VOP_ADVLOCKAdvisory record locking
VOP_WHITEOUTWhiteout vnode
VOP_GETPAGESRead VM pages from file
VOP_PUTPAGESWrite VM pages to file
VOP_STRATEGYRead/write a file system buffer
VOP_BWRITEWrite a file system buffer
VOP_GETEXTATTRGet extended attribute
VOP_SETEXTATTRSet extended attribute
VOP_LISTEXTATTRList extended attributes
VOP_DELETEEXTATTRRemove extended attribute
+

The implementation details of the vnode operations vector are not + quite what is described here.

+

If the file system type does not support a specific operation, it + must nevertheless assign an appropriate stub in the vnode operations vector + to do the minimum required of it. In most cases, such functions either do + nothing or return an error value to the effect that it is not supported.

+

Many of the functions in the vnode operations vector take a + componentname structure. It is used to encapsulate many parameters into a + single function argument. It has the following structure:

+
+
struct componentname {
+        /*
+         * Arguments to lookup.
+         */
+        uint32_t cn_nameiop;    /* namei operation */
+        uint32_t cn_flags;      /* flags to namei */
+        kauth_cred_t cn_cred;   /* credentials */
+        /*
+         * Shared between lookup and commit routines.
+         */
+        const char *cn_nameptr; /* pointer to looked up name */
+        size_t  cn_namelen;     /* length of looked up component */
+        size_t  cn_consume;     /* chars to consume in lookup() */
+};
+
+

The top half of the structure is used exclusively + for the pathname lookups using + () + and is initialized by the caller. The semantics of the lookup are affected + by the lookup operation specified in + + and the flags specified in + . + Valid operations are:

+

+
+
+
LOOKUP
+
perform name lookup only
+
CREATE
+
set up for file creation
+
DELETE
+
set up for file deletion
+
RENAME
+
set up for file renaming
+
OPMASK
+
mask for operation
+
+
+

Valid values for + + are:

+

+
+
+
LOCKLEAF
+
lock inode on return
+
LOCKPARENT
+
want parent vnode returned locked
+
NOCACHE
+
name must not be left in name cache (see + namecache(9))
+
FOLLOW
+
follow symbolic links
+
NOFOLLOW
+
do not follow symbolic links (pseudo)
+
MODMASK
+
mask of operational modifiers
+
+
+

No vnode operations may be called from interrupt context. Most + operations also require the vnode to be locked on entry. To prevent + deadlocks, when acquiring locks on multiple vnodes, the lock of parent + directory must be acquired before the lock on the child directory.

+

Vnode operations for a file system type generally should not be + called directly from the kernel, but accessed indirectly through the + high-level convenience functions discussed in + vnsubr(9).

+
+
+

+
+
(dvp, + vpp, cnp)
+
Lookup a single pathname component in a given directory. The argument + dvp is the locked vnode of the directory to search + and cnp is the pathname component to be searched + for. If the pathname component is found, the address of the resulting + unlocked vnode is returned in vpp. The operation + specified in + + indicates VOP_LOOKUP() the reason for requesting + the lookup and uses it to cache file system type specific information in + the vnode for subsequent operations. +

There are three types of lookups: + ".", ".." (ISDOTDOT), and regular. If the pathname + component being searched for is ".", then + dvp has an extra reference added to it and it is + returned in *vpp. For other pathname components, + () + checks the accessibility of the directory and searches the name cache + for the pathname component. See namecache(9). If the + pathname is not found in the name cache, the directory is searched for + the pathname. The resulting unlocked vnode is returned in + vpp. dvp is always returned + locked.

+

On failure *vpp is + NULL, and *dvp is left + locked. If the operation is successful *vpp is + unlocked and zero is returned. Typically, if *vpp + and dvp are the same vnode the caller will need to + release twice (decrement the reference count) and unlock once.

+
+
(dvp, + vpp, cnp, + vap)
+
Create a new file in a given directory. The argument + dvp is the locked vnode of the directory to create + the new file in and cnp is the pathname component of + the new file. The argument vap specifies the + attributes that the new file should be created with. If the file is + successfully created, the address of the resulting unlocked vnode is + returned in vpp and zero is returned. +

This function is called after + () + when a file is being created. Normally, + VOP_LOOKUP() will have set the SAVENAME flag in + cnp->cn_flags to keep the memory pointed to by + cnp->cn_pnbuf valid. If an error is detected when + creating the file, this memory is released. If the file is created + successfully it will be released unless the SAVESTART flags in specified + in cnp->cn_flags.

+
+
(dvp, + vpp, cnp, + vap)
+
Make a new device-special file in a given directory. The argument + dvp is the locked vnode of the directory to create + the new device-special file in and cnp is the + pathname component of the new device-special file. The argument + vap specifies the attributes that the new + device-special file should be created with. If the file is successfully + created, the address of the resulting unlocked vnode is returned in + vpp and zero is returned. +

This function is called after + () + when a device-special file is being created. Normally, + VOP_LOOKUP() will have set the SAVENAME flag in + cnp->cn_flags to keep the memory pointed to by + cnp->cn_pnbuf valid. If an error is detected when + creating the device-special file, this memory is released. If the + device-special file is created successfully it will be released unless + the SAVESTART flags in specified in + cnp->cn_flags.

+
+
VOP_OPEN(vp, + mode, cred)
+
Open a file. The argument vp is the vnode of the + file to open and mode specifies the access mode + required by the calling process. The calling credentials are specified by + cred. The access mode is a set of flags, including + FREAD, FWRITE, O_NONBLOCK, O_APPEND, etc. + VOP_OPEN() must be called before a file can be + accessed by a thread. The vnode reference count is incremented. +

() + expects the vnode vp to be locked on entry and + will leave it locked on return. If the operation is successful zero is + returned, otherwise an appropriate error code is returned.

+
+
(vp, + fflag, cred)
+
Close a file. The argument vp is the vnode of the + file to close and fflag specifies the access mode by + the calling process. The possible flags are FREAD, + FWRITE and FNONBLOCK. The + calling credentials are specified by cred. + VOP_CLOSE() frees resources allocated by + VOP_OPEN(). +

The vnode vp will be locked on entry and + should remain locked on return.

+
+
(vp, + mode, cred)
+
Determine the accessibility (permissions) of the file against the + specified credentials. The argument vp is the vnode + of the file to check, mode is the type of access + required and cred contains the user credentials to + check. The argument mode is a mask which can contain + VREAD, VWRITE or VEXEC. If the file is accessible in the specified way, + zero is returned, otherwise an appropriate error code is returned. +

The vnode vp will be locked on entry and + should remain locked on return.

+
+
(vp, + vap, cred)
+
Get specific vnode attributes on a file. The argument + vp is the vnode of the file to get the attributes + for. The argument cred specifies the calling + credentials. VOP_GETATTR() uses the file system + type specific data object vp->v_data to reference the + underlying file attributes. The attributes are returned in + vap. Attributes which are not available are set to + the value VNOVAL. +

For more information on vnode attributes + see vattr(9). Historically it was considered + acceptable to call + () + without first locking the vnode. This usage is deprecated.

+

The vnode vp will be locked on entry and + should remain locked on return.

+
+
(vp, + vap, cred)
+
Set specific vnode attributes on a file. The argument + vp is the locked vnode of the file to set the + attributes for. The argument cred specifies the + calling credentials. VOP_SETATTR() uses the file + system type specific data object vp->v_data to + reference the underlying file attributes. The new attributes are defined + in vap. Attributes which are not being modified by + VOP_SETATTR() should be set to the value VNOVAL. + If the operation is successful zero is returned, otherwise an appropriate + error is returned. +

For more information on vnode attributes see + vattr(9).

+
+
(vp, + uio, ioflag, + cred)
+
Read the contents of a file. The argument vp is the + vnode of the file to read from, uio is the location + to read the data into, ioflag is a set of flags and + cred are the credentials of the calling process. +

The ioflag argument is used to give + directives and hints to the file system. When attempting a read, the + high 16 bits are used to provide a read-ahead hint (in unit of file + system blocks) that the file system should attempt. The low 16 bits are + a bit mask which can contain the following flags:

+

+
+
+
IO_UNIT
+
do I/O as atomic unit
+
IO_APPEND
+
append write to end
+
IO_SYNC
+
sync I/O file integrity completion
+
IO_NODELOCKED
+
underlying node already locked
+
IO_NDELAY
+
FNDELAY flag set in file table
+
IO_DSYNC
+
sync I/O data integrity completion
+
IO_ALTSEMANTICS
+
use alternate I/O semantics
+
IO_NORMAL
+
operate on regular data
+
IO_EXT
+
operate on extended attributes
+
IO_DIRECT
+
do not buffer data in the kernel
+
+
+

Zero is returned on success, otherwise an error is returned. + The vnode should be locked on entry and remains locked on exit.

+
+
(vp, + uio, ioflag, + cred)
+
Write to a file. The argument vp is the vnode of the + file to write to, uio is the location of the data to + write, ioflag is a set of flags and + cred are the credentials of the calling process. +

The ioflag argument is + used to give directives and hints to the file system. The low 16 bits + are a bit mask which can contain the same flags as + ().

+

Zero is returned on success, otherwise an error is returned. + The vnode should be locked on entry and remains locked on exit.

+
+
(vp, + pos, len)
+
Allocate backing store. The argument vp is the vnode + for the file. The pos and len + arguments (specified in bytes) name an extent within the file. The blocks + underlying this range, rounding up at the top and down at the bottom if + needed, are checked; if no physical storage is allocated, a physical block + is allocated and zeroed. This operation removes “holes” from + files.
+
(vp, + pos, len)
+
Discard backing store. The argument vp is the vnode + for the file. The pos and len + arguments (specified in bytes) name an extent within the file. The blocks + underlying this range, rounding down at the top and up at the bottom if + needed, are checked. If any physical storage is used, it is deallocated. + This operation creates “holes” in files. Discarded blocks of + regular files read back afterwards as zeroes. On devices, the underlying + discard-block operation if any (e.g. ATA TRIM) is issued. The device + handles this as it sees fit. In particular it is + + guaranteed that discarded blocks on devices will be zeroed; reading a + discarded block might produce zeros, or ones, or the previously existing + data, or some other data, or trash.
+
VOP_IOCTL(vp, + command, data, + fflag, cred)
+
Perform device-specific I/O. The argument vp is the + vnode of the file, normally representing a device. The argument + command specifies the device-specific operation to + perform and cnp provides extra data for the + specified operation. The argument fflags is a set of + flags. The argument cred is the caller's + credentials. If the operation is successful, zero is returned, otherwise + an appropriate error code is returned. +

Most file systems do not supply a function for + (). + This function implements the ioctl(2) system call.

+
+
(vp, + command, data, + fflag, cred)
+
Perform file control. The argument vp is the locked + vnode of the file. The argument command specifies + the operation to perform and cnp provides extra data + for the specified operation. The argument fflags is + a set of flags. The argument cred is the caller's + credentials. If the operation is successful, zero is returned, otherwise + an appropriate error code is returned.
+
(vp, + events)
+
Test if a poll event has occurred. The argument vp + is the vnode of the file to poll. It returns any events of interest as + specified by events that may have occurred for the + file. The argument events is a set of flags as + specified by poll(2). +

The vnode vp remains unlocked throughout + the whole operation.

+
+
(vp, + kn)
+
Register a knote kn with the vnode + vn. If the operation is successful zero is returned, + otherwise an appropriate error code is returned. +

The vnode vp remains unlocked throughout + the whole operation.

+
+
(vp, + flags)
+
Eliminate all activity associated with the vnode vp. + The argument flags is a set of flags. If REVOKEALL + is set in flags all vnodes aliased to the vnode + vp are also eliminated. If the operation is + successful zero is returned, otherwise an appropriate error is returned. +

The vnode vp remains unlocked throughout + the whole operation.

+
+
(vp, + prot, cred)
+
Inform file system that vp is in the process of + being memory mapped. The argument prot specifies the + vm access protection the vnode is going to be mapped with. The argument + cred is the caller's credentials. If the file system + allows the memory mapping, zero is returned, otherwise an appropriate + error code is returned. +

Most file systems do not supply a function for + () + and use + () + to default for success. Only file systems which do not integrate with + the page cache at all typically want to disallow memory mapping.

+
+
(vp, + cred, flags, + offlo, offhi)
+
Flush pending data buffers for a file to disk. The argument + vp is the locked vnode of the file for flush. The + argument cred is the caller's credentials. The + argument flags is a set of flags. If FSYNC_WAIT is + specified in flags, the function should wait for I/O + to complete before returning. The argument offlo and + offhi specify the range of file to flush. If the + operation is successful zero is returned, otherwise an appropriate error + code is returned. +

This function implements the sync(2) and + fsync(2) system calls.

+
+
(vp, + oldoff, newoff, + cred)
+
Test if the file is seekable for the specified offset + newoff. The argument vp is the + locked vnode of the file to test. For most file systems this function + simply tests if newoff is valid. If the specified + newoff is less than zero, the function returns error + code EINVAL.
+
(dvp, + vp, cnp)
+
Remove a file. The argument dvp is the locked vnode + of the directory to remove the file from and vp is + the locked vnode of the file to remove. The argument + cnp is the pathname component about the file to + remove. If the operation is successful zero is returned, otherwise an + appropriate error code is returned. Both dvp and + vp are locked on entry and are to be unlocked before + returning.
+ +
Link to a file. The argument dvp is the locked node + of the directory to create the new link and vp is + the vnode of the file to be linked. The argument cnp + is the pathname component of the new link. If the operation is successful + zero is returned, otherwise an error code is returned. The directory vnode + dvp should be locked on entry and will be released + and unlocked on return. The vnode vp should not be + locked on entry and will remain unlocked on return.
+
VOP_RENAME(fdvp, + fvp, fcnp, + tdvp, tvp, + tcnp)
+
Rename a file. The argument fdvp is the vnode of the + old parent directory containing in the file to be renamed and + fvp is the vnode of the file to be renamed. The + argument fcnp is the pathname component about the + file to be renamed. The argument tdvp is the vnode + of the new directory of the target file and tvp is + the vnode of the target file (if it exists). The argument + tcnp is the pathname component about the file's new + name. If the operation is successful zero is returned, otherwise an error + code is returned. +

The caller must hold the target file system's + rename lock. The source directory and file vnodes should be unlocked and + their reference counts should be incremented before entry. The target + directory and file vnodes should both be locked on entry. + () + updates the reference counts prior to returning.

+

Because of the complexity and nastiness of + the interface, please do not write new code that calls + () + directly until such time as ongoing cleanup work reaches a point where + the interface has been rendered halfway sane.

+
+
(dvp, + vpp, cnp, + vap)
+
Make a new directory in a given directory. The argument + dvp is the locked vnode of the directory to create + the new directory in and cnp is the pathname + component of the new directory. The argument vap + specifies the attributes that the new directory should be created with. If + the file is successfully created, the address of the resulting unlocked + vnode is returned in vpp and zero is returned. +

This function is called after + () + when a directory is being created. Normally, + VOP_LOOKUP() will have set the SAVENAME flag in + cnp->cn_flags to keep the memory pointed to by + cnp->cn_pnbuf valid. If an error is detected when + creating the directory, this memory is released. If the directory is + created successfully it will be released unless the SAVESTART flags in + specified in cnp->cn_flags.

+
+
(dvp, + vp, cnp)
+
Remove a directory in a given directory. The argument + dvp is the locked vnode of the directory to remove + the directory from and vp is the locked vnode of the + directory to remove. The argument cnp is the + pathname component of the directory. Zero is returned on success, + otherwise an error code is returned. Both dvp and + vp should be locked on entry and will be released + and unlocked on return.
+ +
Create a symbolic link in a given directory. The argument + dvp is the locked vnode of the directory to create + the symbolic link in and cnp is the pathname + component of the symbolic link. The argument vap + specifies the attributes that the symbolic link should be created with and + target specifies the pathname of the target of the + symbolic link. If the symbolic link is successfully created, the address + of the resulting unlocked vnode is returned in vpp + and zero is returned. +

This function is called after + () + when a symbolic link is being created. Normally, + VOP_LOOKUP() will have set the SAVENAME flag in + cnp->cn_flags to keep the memory pointed to by + cnp->cn_pnbuf valid. If an error is detected when + creating the symbolic link, this memory is released. If the symbolic + link is created successfully it will be released unless the SAVESTART + flags in specified in cnp->cn_flags.

+
+
VOP_READDIR(vp, + uio, cred, + eofflag, cookies, + ncookies)
+
Read directory entry. The argument vp is the vnode + of the directory to read the contents of and uio is + the destination location to read the contents into. The argument + cred is the caller's credentials. The argument + eofflag is the pointer to a flag which is set by + VOP_READDIR() to indicate an end-of-file + condition. If eofflag is + NULL, the end-of-file condition is not returned. + The arguments cookies and + ncookies specify the addresses for the list and + number of directory seek cookies generated for NFS. Both + cookies and ncookies should be + NULL if they aren't required to be returned by + VOP_READDIR(). The directory contents are read + into struct dirent structures and uio->uio_offset + is set to the offset of the next unread directory entry. This offset may + be used in a following invocation to continue a sequential read of the + directory contents. If the operation is successful zero is returned, + otherwise an appropriate error code is returned. +

The directory should be locked on entry and will remain locked + on return.

+

In case ncookies and + cookies are supplied, one cookie should be + returned per directory entry. The value of the cookie for each directory + entry should be the offset within the directory where the on-disk + version of the following directory entry starts. That is, for each + directory entry i, the corresponding cookie should + refer to the offset of directory entry i + 1.

+

Note that the cookies + array must be allocated by the callee using the M_TEMP malloc type as + callers of + () + must be able to free the allocation.

+
+ +
Read the contents of a symbolic link. The argument + vp is the locked vnode of the symlink and + uio is the destination location to read the contents + into. The argument cred is the credentials of the + caller. If the operation is successful zero is returned, otherwise an + error code is returned. +

The vnode should be locked on entry and will remain locked on + return.

+
+
(dvp, + cnp)
+
Abort pending operation on vnode dvp and free + resources allocated in cnp. +

This operation is rarely implemented in + file systems and + () + is typically used instead.

+
+
(vp)
+
Release the inactive vnode. VOP_INACTIVE() is + called when the kernel is no longer using the vnode. This may be because + the reference count reaches zero or it may be that the file system is + being forcibly unmounted while there are open files. It can be used to + reclaim space for open but deleted files. The argument + vp is the locked vnode to be released. If the + operation is successful zero is returned, otherwise an appropriate error + code is returned. The vnode vp must be locked on + entry, and will remain locked on return.
+
(vp)
+
Reclaim the vnode for another file system. + VOP_RECLAIM() is called when a vnode is being + reused for a different file system. Any file system specific resources + associated with the vnode should be freed. The argument + vp is the vnode to be reclaimed. If the operation is + successful zero is returned, otherwise an appropriate error code is + returned. The vnode vp should be locked on entry, + and will be returned unlocked.
+
(vp, + flags)
+
Sleep until vnode lock is free. The argument vp is + the vnode of the file to be locked. The argument + flags is LK_EXCLUSIVE to + take the lock exclusively or LK_SHARED to take a + shared lock. If flags contains + LK_NOWAIT and the lock is busy, the operation will + return immediately with an error code. If flags + contains LK_RETRY this is a hint the caller wants + the lock on dead vnodes too. If the operation is successful zero is + returned, otherwise an appropriate error code is returned. + VOP_LOCK() is used to serialize access to the file + system such as to prevent two writes to the same file from happening at + the same time. Kernel code should use vn_lock(9) to lock + a vnode rather than calling VOP_LOCK() + directly.
+
(vp)
+
Wake up process sleeping on lock. The argument vp is + the vnode of the file to be unlocked. If the operation is successful zero + is returned, otherwise an appropriate error code is returned. + VOP_UNLOCK() is used to serialize access to the + file system such as to prevent two writes to the same file from happening + at the same time.
+
(vp)
+
Test if the vnode vp is locked. Possible return + values are LK_EXCLUSIVE, + LK_SHARED or 0 for lock held exclusively by the + calling thread, shared lock held by anyone or unlocked, respectively. +

This function must never be used to make locking decisions at + run time: it is provided only for diagnostic purposes.

+
+
(vp, + bn, vpp, + bnp, runp)
+
Convert the logical block number bn of a file + specified by vnode vp to its physical block number + on the disk. The physical block is returned in bnp. + In case the logical block is not allocated, -1 is used. +

If vpp is not + NULL, the vnode of the device vnode for the file + system is returned in the address specified by + vpp. If runp is not + NULL, the number of contiguous blocks starting + from the next block after the queried block will be returned in + runp.

+
+
(vp)
+
Print debugging information. The argument vp is the + vnode to print. If the operation is successful zero is returned, otherwise + an appropriate error code is returned.
+
(vp, + name, retval)
+
Implement POSIX pathconf(2) and + fpathconf(2) support. The argument + vp is the locked vnode to get information about. The + argument name specified the type of information to + return. The information is returned in the address specified by + retval. Valid values for name + are: +

+
+
+
_PC_LINK_MAX
+
return the maximum number of links to a file
+
_PC_NAME_MAX
+
return the maximum number of bytes in a file name
+
_PC_PATH_MAX
+
return the maximum number of bytes in a pathname
+
_PC_PIPE_BUF
+
return the maximum number of bytes which will be written atomically to + a pipe
+
_PC_CHOWN_RESTRICTED
+
return 1 if appropriate privileges are required for the + chown(2) system call, otherwise zero
+
_PC_NO_TRUNC
+
return 0 if file names longer than {NAME_MAX} + are silently truncated
+
+
+

If name is recognized, + *retval is set to the specified value and zero is + returned, otherwise an appropriate error is returned.

+
+
(vp, + id, op, + fl, flags)
+
Manipulate Advisory record locks on a vnode. The argument + vp is the vnode on which locks are manipulated. The + argument id is the id token which is changing the + lock and op is the fcntl(2) + operation to perform. Valid values are: +

+
+
+
F_SETLK
+
set lock
+
F_GETLK
+
get the first conflicted lock
+
F_UNLCK
+
clear lock
+
+
+

The argument fl is a + description of the lock. In the case of + SEEK_CUR, The caller should add the current file + offset to fl->l_start beforehand. + () + treats SEEK_CUR as + SEEK_SET.

+

The argument flags is the set of flags. + Valid values are:

+

+
+
+
F_WAIT
+
wait until lock is granted
+
F_FLOCK
+
use flock(2) semantics for lock
+
F_POSIX
+
use POSIX semantics for lock
+
+
+

If the operation is successful zero is returned, otherwise an + appropriate error is returned.

+
+
(dvp, + cnp, flags)
+
Whiteout pathname component in directory with vnode + dvp. The argument cnp + specifies the pathname component to whiteout. +

The vnode dvp should be locked on entry + and will remain locked on return.

+
+
(vp, + offset, m, + count, centeridx, + access_type, advice, + flags)
+
Read VM pages from file. The argument vp is the + locked vnode to read the VM pages from. The argument + offset is offset in the file to start accessing and + m is an array of VM pages. The argument + count points a variable that specifies the number of + pages to read. If the operation is successful zero is returned, otherwise + an appropriate error code is returned. If PGO_LOCKED is specified in + , + VOP_GETPAGES() might return less pages than + requested. In that case, the variable pointed to by + + will be updated. +

This function is primarily used by the page-fault handing + mechanism.

+
+
(vp, + offlo, offhi, + flags)
+
Write modified (dirty) VM pages to file. The argument + vp is the vnode to write the VM pages to. The + vnode's vm object lock (v_uobj.vmobjlock) must be + held by the caller and will be released upon return. The arguments + offlo and offhi specify the + range of VM pages to write. In case offhi is given + as 0, all pages at and after the start offset offlo + belonging the vnode vp will be written. The argument + flags controls the behavior of the routine and takes + the vm pager's flags (PGO_ -prefixed). If the + operation is successful zero is returned, otherwise an appropriate error + code is returned. +

The function is primarily used by the + pageout handling mechanism and is commonly implemented indirectly by + () + with the help of + () + and VOP_BMAP().

+
+
VOP_STRATEGY(vp, + bp)
+
Read/write a file system buffer. The argument vp is + the vnode to read/write to. The argument bp is the + buffer to be read or written. VOP_STRATEGY() will + either read or write data to the file depending on the value of + . + If the operation is successful zero is returned, otherwise an appropriate + error code is returned.
+
(vp, + bp)
+
Write a file system buffer. The argument vp is the + vnode to write to. The argument bp specifies the + buffer to be written. If the operation is successful zero is returned, + otherwise an appropriate error code is returned.
+
(vp, + attrnamespace, name, + uio, size, + cred)
+
Get an extended attribute. The argument vp is the + locked vnode of the file or directory from which to retrieve the + attribute. The argument attrnamespace specifies the + extended attribute namespace. The argument name is a + nul-terminated character string naming the attribute to retrieve. The + argument uio, if not NULL, + specifies where the extended attribute value is to be written. The + argument size, if not NULL, + will contain the number of bytes required to read all of the attribute + data upon return. In most cases, uio will be + NULL when size is not, and + vice versa. The argument cred specifies the user + credentials to use when authorizing the request.
+
(vp, + attrnamespace, name, + uio, cred)
+
Set an extended attribute. The argument vp is the + locked vnode of the file or directory to which to store the attribute. The + argument namespace specifies the extended attribute + namespace. The argument name is a nul-terminated + character string naming the attribute to store. The argument + uio specifies the source of the extended attribute + data. The argument cred specifies the user + credentials to use when authorizing the request.
+
(vp, + attrnamespace, uio, + size, cred)
+
Retrieve the list of extended attributes. The argument + vp is the locked vnode of the file or directory + whose attributes are to be listed. The argument + attrnamespace specifies the extended attribute + namespace. The argument uio, if not + NULL, specifies where the extended attribute list + is to be written. The argument size, if not + NULL, will contain the number of bytes required to + read all of the attribute names upon return. In most cases, + uio will be NULL when + size is not, and vice versa. The argument + cred specifies the user credentials to use when + authorizing the request.
+
(vp, + attrnamespace, name, + cred)
+
Remove attribute name from file associated with + vp. The argument attrnamespace + specifies the extended attribute namespace. If full removal is not + supported, the file system should return + EOPNOTSUPP to allow the caller to zero out the + value with VOP_SETEXTATTR(). +

The vnode vp should be locked on entry + and will remain locked on return.

+
+
+
+
+

+

src/sys/kern/vnode_if.src contains the + list of vnode functions, their definitions and an exact locking + protocol.

+
+
+

+
+
[]
+
Access for the specified operation is denied.
+
[]
+
Quota exceeded.
+
[]
+
attempt to read from an illegal offset in the directory; unrecognized + input
+
[]
+
a read error occurred while reading the directory or reading the contents + of a symbolic link
+
[]
+
A CREATE or RENAME operation would be successful.
+
[]
+
The requested attribute is not defined for this vnode.
+
[]
+
The component was not found in the directory.
+
[]
+
The file system is full.
+
[]
+
The vnode does not represent a directory.
+
[]
+
attempt to remove a directory which is not empty
+
[]
+
an attempt was made to change an immutable file
+
[]
+
the file system is read-only
+
+
+
+

+

extattr(9), intro(9), + namei(9), vattr(9), + vfs(9), vfsops(9), + vnode(9)

+
+
+

+

The vnode operations vector, its functions and the corresponding + macros appeared in 4.3BSD.

+
+
+ + + + + +
June 15, 2023NetBSD 10.1
-- cgit v1.2.3