]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/vfs/vnode_if.src
xnu-4570.61.1.tar.gz
[apple/xnu.git] / bsd / vfs / vnode_if.src
index 6fac8a1437752e3bb421b2296f39d802d8cf9505..a350aa8a76d60cb0a0f06a2b6d716637c7638dde 100644 (file)
 #
 
 #
-# Above each of the vop descriptors is a specification of the locking
-# protocol used by each vop call.  The first column is the name of
-# the variable, the remaining three columns are in, out and error
-# respectively.  The "in" column defines the lock state on input,
-# the "out" column defines the state on succesful return, and the
-# "error" column defines the locking state on error exit.
+# Needs to be updated for KPI changes...
 #
-# The locking value can take the following values:
-# L: locked.
-# U: unlocked/
-# -: not applicable.  vnode does not yet (or no longer) exists.
-# =: the same on input and output, may be either L or U.
-# X: locked if not nil.
-#
-
-# If a vnode operation if likely to generate buffer cache IO
-# for file data, add the word "UBC" on the line containing the
-# name of the vnode operation. The word "UBC" must be the third
-# word on the line, right after "{".
-
-
-#
-#% lookup      dvp     L ? ?
-#% lookup      vpp     - L -
-#
-# XXX - the lookup locking protocol defies simple description and depends
-#      on the flags and operation fields in the (cnp) structure.  Note
-#      ebly that *vpp may equal dvp and both may be locked.
-#
-vop_lookup {
-       IN struct vnode *dvp;
-       INOUT struct vnode **vpp;
-       IN struct componentname *cnp;
-};
-
-#
-#% cachedlookup        dvp     L ? ?
-#% cachedlookup        vpp     - L -
-#
-# This must be an exact copy of lookup.  See kern/vfs_cache.c for details.
-#
-vop_cachedlookup {
-       IN struct vnode *dvp;
-       INOUT struct vnode **vpp;
-       IN struct componentname *cnp;
-};
-
-#
-#% create      dvp     L L L
-#% create      vpp     - L -
-#
-vop_create {
-       IN WILLRELE struct vnode *dvp;
-       OUT struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-};
-
-#
-#% whiteout    dvp     L L L
-#% whiteout    cnp     - - -
-#% whiteout    flag    - - -
-#
-vop_whiteout {
-       IN WILLRELE struct vnode *dvp;
-       IN struct componentname *cnp;
-       IN int flags;
-};
-
-#
-#% mknod       dvp     L U U
-#% mknod       vpp     - X -
-#
-vop_mknod {
-       IN WILLRELE struct vnode *dvp;
-       OUT WILLRELE struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-};
-
-#
-#% mkcomplex   dvp     L U U
-#% mkcomplex   vpp     - X -
-#
-vop_mkcomplex {
-       IN WILLRELE struct vnode *dvp;
-       OUT WILLRELE struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-       IN u_long type;
-};
-
-#
-#% open                vp      L L L
-#
-vop_open {
-       IN struct vnode *vp;
-       IN int mode;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% close       vp      U U U
-#
-vop_close {
-       IN struct vnode *vp;
-       IN int fflag;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% access      vp      L L L
-#
-vop_access {
-       IN struct vnode *vp;
-       IN int mode;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% getattr     vp      = = =
-#
-vop_getattr {
-       IN struct vnode *vp;
-       IN struct vattr *vap;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% setattr     vp      L L L
-#
-vop_setattr {
-       IN struct vnode *vp;
-       IN struct vattr *vap;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% getattrlist vp      = = =
-#
-vop_getattrlist {
-       IN struct vnode *vp;
-       IN struct attrlist *alist;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% setattrlist vp      L L L
-#
-vop_setattrlist {
-       IN struct vnode *vp;
-       IN struct attrlist *alist;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% read                vp      L L L
-#
-vop_read { UBC
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN int ioflag;
-       IN struct ucred *cred;
-};
-
-#
-#% write       vp      L L L
-#
-vop_write { UBC
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN int ioflag;
-       IN struct ucred *cred;
-};
-
-#
-#% lease       vp      = = =
-#
-vop_lease {
-       IN struct vnode *vp;
-       IN struct proc *p;
-       IN struct ucred *cred;
-       IN int flag;
-};
-
-#
-#% ioctl       vp      U U U
-#
-vop_ioctl {
-       IN struct vnode *vp;
-       IN u_long command;
-       IN caddr_t data;
-       IN int fflag;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% select      vp      U U U
-#
-# Needs work?  (fflags)
-#
-vop_select {
-       IN struct vnode *vp;
-       IN int which;
-       IN int fflags;
-       IN struct ucred *cred;
-       IN void  * wql;
-       IN struct proc *p;
-};
-
-#
-#% exchange fvp                L L L
-#% exchange tvp                L L L
-#
-vop_exchange {
-       IN struct vnode *fvp;
-       IN struct vnode *tvp;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% revoke      vp      U U U
-#
-vop_revoke {
-       IN struct vnode *vp;
-       IN int flags;
-};
-
-#
-# XXX - not used
-#
-vop_mmap {
-       IN struct vnode *vp;
-       IN int fflags;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% fsync       vp      L L L
-#
-vop_fsync { UBC
-       IN struct vnode *vp;
-       IN struct ucred *cred;
-       IN int waitfor;
-       IN struct proc *p;
-};
-
-#
-# XXX - not used
-# Needs work: Is newoff right?  What's it mean?
-#
-vop_seek {
-       IN struct vnode *vp;
-       IN off_t oldoff;
-       IN off_t newoff;
-       IN struct ucred *cred;
-};
-
-#
-#% remove      dvp     L U U
-#% remove      vp      L U U
-#
-vop_remove {
-       IN WILLRELE struct vnode *dvp;
-       IN WILLRELE struct vnode *vp;
-       IN struct componentname *cnp;
-};
-
-#
-#% link                vp      U U U
-#% link                tdvp    L U U
-#
-vop_link {
-       IN WILLRELE struct vnode *vp;
-       IN struct vnode *tdvp;
-       IN struct componentname *cnp;
-};
-
-#
-#% rename      fdvp    U U U
-#% rename      fvp     U U U
-#% rename      tdvp    L U U
-#% rename      tvp     X U U
-#
-vop_rename {
-       IN WILLRELE struct vnode *fdvp;
-       IN WILLRELE struct vnode *fvp;
-       IN struct componentname *fcnp;
-       IN WILLRELE struct vnode *tdvp;
-       IN WILLRELE struct vnode *tvp;
-       IN struct componentname *tcnp;
-};
-
-#
-#% mkdir       dvp     L U U
-#% mkdir       vpp     - L -
-#
-vop_mkdir {
-       IN WILLRELE struct vnode *dvp;
-       OUT struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-};
-
-#
-#% rmdir       dvp     L U U
-#% rmdir       vp      L U U
-#
-vop_rmdir {
-       IN WILLRELE struct vnode *dvp;
-       IN WILLRELE struct vnode *vp;
-       IN struct componentname *cnp;
-};
-
-#
-#% symlink     dvp     L U U
-#% symlink     vpp     - U -
-#
-# XXX - note that the return vnode has already been VRELE'ed
-#      by the filesystem layer.  To use it you must use vget,
-#      possibly with a further namei.
-#
-vop_symlink {
-       IN WILLRELE struct vnode *dvp;
-       OUT WILLRELE struct vnode **vpp;
-       IN struct componentname *cnp;
-       IN struct vattr *vap;
-       IN char *target;
-};
-
-#
-#% readdir     vp      L L L
-#
-vop_readdir {
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-       INOUT int *eofflag;
-       OUT int *ncookies;
-       INOUT u_long **cookies;
-};
-
-#
-#% readdirattr vp      L L L
-#
-vop_readdirattr {
-       IN struct vnode *vp;
-       IN struct attrlist *alist;
-       INOUT struct uio *uio;
-       IN u_long maxcount;
-       IN u_long options;
-       OUT u_long *newstate;
-       OUT int *eofflag;
-       OUT u_long *actualcount;
-       OUT u_long **cookies;
-       IN struct ucred *cred;
-};
-
-#
-#% readlink    vp      L L L
-#
-vop_readlink {
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-};
-
-#
-#% abortop     dvp     = = =
-#
-vop_abortop {
-       IN struct vnode *dvp;
-       IN struct componentname *cnp;
-};
-
-#
-#% inactive    vp      L U U
-#
-vop_inactive {
-       IN struct vnode *vp;
-       IN struct proc *p;
-};
-
-#
-#% reclaim     vp      U U U
-#
-vop_reclaim {
-       IN struct vnode *vp;
-       IN struct proc *p;
-};
-
-#
-#% lock                vp      U L U
-#
-vop_lock {
-       IN struct vnode *vp;
-       IN int flags;
-       IN struct proc *p;
-};
-
-#
-#% unlock      vp      L U L
-#
-vop_unlock {
-       IN struct vnode *vp;
-       IN int flags;
-       IN struct proc *p;
-};
-
-#
-#% bmap                vp      L L L
-#% bmap                vpp     - U -
-#
-vop_bmap {
-       IN struct vnode *vp;
-       IN daddr_t bn;
-       OUT struct vnode **vpp;
-       IN daddr_t *bnp;
-       OUT int *runp;
-};
-
-#
-# Needs work: no vp?
-#
-#vop_strategy {
-#      IN struct buf *bp;
-#};
-
-#
-#% print       vp      = = =
-#
-vop_print {
-       IN struct vnode *vp;
-};
-
-#
-#% islocked    vp      = = =
-#
-vop_islocked {
-       IN struct vnode *vp;
-};
-
-#
-#% pathconf    vp      L L L
-#
-vop_pathconf {
-       IN struct vnode *vp;
-       IN int name;
-       OUT register_t *retval;
-};
-
-#
-#% advlock     vp      U U U
-#
-vop_advlock {
-       IN struct vnode *vp;
-       IN caddr_t id;
-       IN int op;
-       IN struct flock *fl;
-       IN int flags;
-};
-
-#
-#% blkatoff    vp      L L L
-#
-vop_blkatoff {
-       IN struct vnode *vp;
-       IN off_t offset;
-       OUT char **res;
-       OUT struct buf **bpp;
-};
-
-#
-#% valloc      pvp     L L L
-#
-vop_valloc {
-       IN struct vnode *pvp;
-       IN int mode;
-       IN struct ucred *cred;
-       OUT struct vnode **vpp;
-};
-
-#
-#% reallocblks vp      L L L
-#
-vop_reallocblks {
-       IN struct vnode *vp;
-       IN struct cluster_save *buflist;
-};
-
-#
-#% vfree       pvp     L L L
-#
-vop_vfree {
-       IN struct vnode *pvp;
-       IN ino_t ino;
-       IN int mode;
-};
-
-#
-#% truncate    vp      L L L
-#
-vop_truncate { UBC
-       IN struct vnode *vp;
-       IN off_t length;
-       IN int flags;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% allocate    vp      L L L
-#
-vop_allocate {
-       IN struct vnode *vp;
-       IN off_t length;
-       IN u_int32_t flags;
-       OUT off_t *bytesallocated;
-       IN off_t offset;
-       IN struct ucred *cred;
-       IN struct proc *p;
-};
-
-#
-#% update      vp      L L L
-#
-vop_update {
-       IN struct vnode *vp;
-       IN struct timeval *access;
-       IN struct timeval *modify;
-       IN int waitfor;
-};
-
-#
-#% pgrd                vp      L L L
-#
-vop_pgrd {
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-};
-
-#
-#% pgwr                vp      L L L
-#
-vop_pgwr {
-       IN struct vnode *vp;
-       INOUT struct uio *uio;
-       IN struct ucred *cred;
-       IN vm_offset_t  offset;
-};
-
-#
-# Needs work: no vp?
-#
-#vop_bwrite {
-#      IN struct buf *bp;
-#};
-
-#
-#% pagein      vp      = = =
-#
-vop_pagein {
-       IN struct vnode *vp;
-       IN upl_t pl;
-       IN vm_offset_t pl_offset;
-       IN off_t f_offset;
-       IN size_t size;
-       IN struct ucred *cred;
-       IN int flags;
-};
-
-#
-#% pageout     vp      = = =
-#
-vop_pageout {
-       IN struct vnode *vp;
-       IN upl_t pl;
-       IN vm_offset_t pl_offset;
-       IN off_t f_offset;
-       IN size_t size;
-       IN struct ucred *cred;
-       IN int flags;
-};
-
-#
-#% devblocksize        vp      = = =
-#
-vop_devblocksize {
-       IN struct vnode *vp;
-       OUT register_t *retval;
-};
-
-#
-#% searchfs    vp      L L L
-#
-vop_searchfs {
-       IN struct vnode *vp;
-       IN void *searchparams1;
-       IN void *searchparams2;
-       IN struct attrlist *searchattrs;
-       IN u_long maxmatches;
-       IN struct timeval *timelimit;
-       OUT struct attrlist *returnattrs;
-       OUT u_long *nummatches;
-       IN u_long scriptcode;
-       IN u_long options;
-       INOUT struct uio *uio;
-       INOUT struct searchstate *searchstate;
-};
-
-#
-#% copyfile fvp U U U
-#% copyfile tdvp L U U
-#% copyfile tvp X U U
-#
-vop_copyfile {
-    IN WILLRELE struct vnode *fvp;
-    IN WILLRELE struct vnode *tdvp;
-    IN WILLRELE struct vnode *tvp;
-    IN struct componentname *tcnp;
-    IN int mode;
-    IN int flags;
-};
-
-#
-#% blktooff vp = = =
-#
-# Given a logical block number for a vnode
-# return file offset
-#
-vop_blktooff {
-       IN struct vnode *vp;
-       IN daddr_t lblkno;
-       OUT off_t *offset;
-};
-
-#
-#% offtoblk vp = = =
-#
-# Given a file offset for a vnode
-# return logical block number
-#
-vop_offtoblk {
-       IN struct vnode *vp;
-       IN off_t offset;
-       OUT daddr_t *lblkno;
-};
-
-#
-#% cmap vp L L L
-#
-# Given a file offset and size of IO for a vnode
-# return physical block number and bytes physically
-# contiguous at that physical block.
-#
-# An offset into the physical block may be returned [optional]
-# This is needed to support 4K/1K UFS on the devices with 2K
-# sector size.
-vop_cmap {
-       IN struct vnode *vp;
-       IN off_t foffset;
-       IN size_t size;
-       OUT daddr_t *bpn;
-       OUT size_t *run;
-       OUT void *poff;
-};
-