/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* bos72L src/bos/kernel/sys/vnode.h 1.36.7.6 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1985,2018 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* @(#)05 1.36.7.6 src/bos/kernel/sys/vnode.h, syslfs, bos72L, l2018_19A0 4/11/18 10:58:50 */ /* * COMPONENT_NAME: SYSLFS - Logical File System */ #ifndef _H_VNODE #define _H_VNODE /* * Copyright (c) 1988 by Sun Microsystems, Inc. */ /* * * vnode, gnode and vnode operations structures and defines * * defines: * struct vnode * struct gnode * struct vnodeops * vnodeops calling macros * struct exec_data * struct open_data * struct create_data * */ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include #ifdef _KERNEL #include #include #endif /* _KERNEL */ #include struct vfs; struct gnode; struct vnodeops; struct filock; struct ucred; struct vattr; struct buf; struct eflock; struct file_secattr; /* * vnode ("virtual inode") structure * vnodes are used to keep the name and place of an object in the * filesystem straight, so there may be more than one vnode per object. * A "gnode" is used to abstract the object itself. * NOTE: there is always at least one vnode per gnode. */ struct vnode { ushort v_flag; /* see definitions below */ ushort v_flag2; /* Stolen for NFS version 4 */ ulong32int64_t v_count; /* the use count of this vnode */ int v_vfsgen; /* generation number for the vfs */ Simple_lock v_lock; /* lock on the structure */ struct vfs *v_vfsp; /* pointer to the vfs of this vnode */ struct vfs *v_mvfsp; /* pointer to vfs which was mounted over this */ /* vnode; NULL if no mount has occurred */ struct gnode *v_gnode; /* ptr to implementation gnode */ struct vnode *v_next; /* ptr to other vnodes that share same gnode */ struct vnode *v_vfsnext; /* ptr to next vnode on list off of vfs */ struct vnode *v_vfsprev; /* ptr to prev vnode on list off of vfs */ union v_data { void * _v_socket; /* vnode associated data */ struct vnode * _v_pfsvnode; /* vnode in pfs for spec */ } _v_data; char * v_audit; /* ptr to audit object */ }; typedef struct vnode vnode_t; #define v_socket _v_data._v_socket #define v_pfsvnode _v_data._v_pfsvnode /* * Definitions for v_flag field * of vnode structure. */ #define V_ROOT 0x01 /* vnode is the root of a vfs */ #ifndef VROOT #define VROOT V_ROOT #endif #define V_MOUNTING 0x02 /* mount in progress over vnode */ #define V_MODFILEATTR_MON 0x04 /* file currently monitored */ #define V_UNUSED08 0x08 #define V_UNUSED10 0x10 #define V_UNUSED20 0x20 #define V_UNUSED40 0x40 #define V_UNUSED80 0x80 #define V_SPEC 0x100 /* special device - deprecated */ #define V_ACCESS 0x200 /* indicates the file has been */ /* accessed since last timestamp*/ #define V_UPDATE 0x400 /* indicates the file has been */ /* updated since last timestamp */ #define V_LAZYTS 0x800 /* indicates the lazy access or */ /* update option is turned on. */ #define V_NBC 0x1000 /* this vnode is cached in NBC */ #define V_SNAPSHOT 0x2000 /* this vnode is a snapshot */ #define V_AHAFS_MON 0x4000 /* AHAFS-Indicates that the file*/ /* is currently being monitored */ #define V_IOOLAZY 0x8000 /* lazy access turned on by tunable */ #define __V_MAX 0xFFFF /* nothing above here */ /* The following are provided for source compatability, but are * deprecated flags. They have no known uses. * * Note: V_SPEC is also deprecated, but is set in specfs (just not * read anywhere). It will be deleted later. */ #define V_INTRANSIT 0x00 #define V_DMA 0x08 #define V_TEXT 0x10 #define V_RMDC 0x20 #define V_RENAME 0x40 #define V_LOCK 0x80 /* * Definitions for v_flag2 field of vnode structure. * These are specific to NFS. */ #define V_PFS 0x1 /* this vnode is covered */ #define V_EXPORT 0x2 /* this vnode is an export root */ #define V_REFERRAL 0x4 /* this vnode is a referral object */ #define V_VCM 0x8 /* this vnode created with VCM active */ /* this is only used as a template for per vfs data attached to gnodes */ struct gn_vfsdata { struct gn_vfsdata *gnv_next; /* next in chain, NULL ends chain */ struct gnode *gnv_gnode; /* pointer back to gnode */ int gn_gfstype; /* gfs type of this vfs */ /* vfs specific stuff here */ }; /* * gnode types * DO NOT rearrange/redefine these first 10! * VNON means no type. */ enum vtype { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VSOCK, VBAD, VFIFO, VMPC }; #define VUNDEF VNON /* undefined is same as nothing */ typedef enum vtype vtype_t; /* * gnode structure - represents a real object in the file system; * i.e. there is a 1:1 correspondance between an gnode and a file on a disk. */ struct gnode { enum vtype gn_type; /* type of object: VDIR,VREG,... */ short gn_flags; /* attributes of object */ unsigned char gn_lfs; /* For LFS use */ vmid_t gn_seg; /* segment into which file is mapped */ long32int64_t gn_mwrcnt; /* count of map for write */ long32int64_t gn_mrdcnt; /* count of map for read */ long32int64_t gn_rdcnt; /* total opens for read */ long32int64_t gn_wrcnt; /* total opens for write */ long32int64_t gn_excnt; /* total opens for exec */ long32int64_t gn_rshcnt; /* total opens for read share */ struct vnodeops *gn_ops; struct vnode *gn_vnode; /* ptr to list of vnodes per this gnode */ dev_t gn_rdev; /* for devices, their "dev_t" */ chan_t gn_chan; /* for devices, their "chan", minor's minor */ Simple_lock gn_reclk_lock; /* lock for filocks list */ int gn_reclk_event; /* event list for file locking */ struct filock *gn_filocks; /* locked region list */ caddr_t gn_data; /* ptr to private data (usually contiguous) */ }; /* * definitions of gn_flags */ #define GNF_TCB 0x0001 /* gnode corresponds to a file in the TCB */ #define GNF_WMAP 0x0002 /* mapped for writing at some time */ #define GNF_NSHARE 0x0004 /* opened non share */ #define GNF_NWRITEMOUNT 0x0008 /* disallow writing while mounted */ #define GNF_UIOMOVE 0x0010 /* all accesses to file go through vm_uiomove * (unless GNF_WMAP is set) */ #define GNF_CAPI 0x0020 /* Coherent accelerator (CAPI) device */ #define GNF_ATTACH 0x0100 /* gnode corresponds to an attached file */ #define GNF_SEC_ERDWR 0x0200 /* Extended rdwr attr call enabled. */ #define GNF_SNAPSHOT 0x2000 /* open snapshot device */ #define GNF_NORDAWRB 0x4000 /* no read ahead or write behind */ #define GNF_XPAGER 0x8000 /* external pager callout operations enabled */ #define SecErdwrCall(gp) ((gp)->gn_flags & GNF_SEC_ERDWR) /* * some defines so old things keep working */ #define gn_segcnt gn_mwrcnt #define v_type v_gnode->gn_type #define v_vntype v_gnode->gn_type #define v_rdev v_gnode->gn_rdev #define v_data v_gnode->gn_data /* * track device opens for mount with gnode exec count. */ #define gn_mntcnt gn_excnt /* * Structure containing operations vector */ struct vnodeops { /* creation/naming/deletion */ int (*vn_link)(struct vnode *, struct vnode *, char *, struct ucred *); int (*vn_mkdir)(struct vnode *, char *, int32long64_t, struct ucred *); int (*vn_mknod)(struct vnode *, caddr_t, int32long64_t, dev_t, struct ucred *); int (*vn_remove)(struct vnode *, struct vnode *, char *, struct ucred *); int (*vn_rename)(struct vnode *, struct vnode *, caddr_t, struct vnode *,struct vnode *,caddr_t,struct ucred *); int (*vn_rmdir)(struct vnode *, struct vnode *, char *, struct ucred *); /* lookup, file handle stuff */ int (*vn_lookup)(struct vnode *, struct vnode **, char *, int32long64_t, struct vattr *, struct ucred *); int (*vn_fid)(struct vnode *, struct fileid *, struct ucred *); /* access to files */ int (*vn_open)(struct vnode *, int32long64_t, ext_t, caddr_t *, struct ucred *); int (*vn_create)(struct vnode *, struct vnode **, int32long64_t, caddr_t, int32long64_t, caddr_t *, struct ucred *); int (*vn_hold)(struct vnode *); int (*vn_rele)(struct vnode *); int (*vn_close)(struct vnode *, int32long64_t, caddr_t, struct ucred *); int (*vn_map)(struct vnode *, caddr_t, uint32long64_t, uint32long64_t, uint32long64_t, struct ucred *); int (*vn_unmap)(struct vnode *, int32long64_t, struct ucred *); /* manipulate attributes of files */ int (*vn_access)(struct vnode *, int32long64_t, int32long64_t, struct ucred *); int (*vn_getattr)(struct vnode *, struct vattr *, struct ucred *); int (*vn_setattr)(struct vnode *, int32long64_t, int32long64_t, int32long64_t, int32long64_t, struct ucred *); /* data update operations */ int (*vn_fclear)(struct vnode *, int32long64_t, offset_t, offset_t, caddr_t, struct ucred *); int (*vn_fsync)(struct vnode *, int32long64_t, int32long64_t, struct ucred *); int (*vn_ftrunc)(struct vnode *, int32long64_t, offset_t, caddr_t, struct ucred *); int (*vn_rdwr)(struct vnode *, enum uio_rw, int32long64_t, struct uio *, ext_t, caddr_t, struct vattr *, struct ucred *); int (*vn_lockctl)(struct vnode *, offset_t, struct eflock *, int32long64_t, int (*)(), ulong *, struct ucred *); /* extensions */ int (*vn_ioctl)(struct vnode *, int32long64_t, caddr_t, size_t, ext_t, struct ucred *); int (*vn_readlink)(struct vnode *, struct uio *, struct ucred *); int (*vn_select)(struct vnode *, int32long64_t, ushort, ushort *, void (*)(), caddr_t, struct ucred *); int (*vn_symlink)(struct vnode *, char *, char *, struct ucred *); int (*vn_readdir)(struct vnode *, struct uio *, struct ucred *); /* buffer ops */ int (*vn_strategy)(struct vnode *, struct buf *, struct ucred *); /* security things */ int (*vn_revoke)(struct vnode *, int32long64_t, int32long64_t, struct vattr *, struct ucred *); int (*vn_getacl)(struct vnode *, struct uio *, struct ucred *); int (*vn_setacl)(struct vnode *, struct uio *, struct ucred *); int (*vn_getpcl)(struct vnode *, struct uio *, struct ucred *); int (*vn_setpcl)(struct vnode *, struct uio *, struct ucred *); int (*vn_seek)(struct vnode *, offset_t *, struct ucred *); /* 421 extensions */ int (*vn_fsync_range)(struct vnode *, int32long64_t, int32long64_t, offset_t, offset_t, struct ucred *); int (*vn_create_attr)(struct vnode *, struct vnode **, int32long64_t, char *, struct vattr *, int32long64_t, caddr_t *, struct ucred *); int (*vn_finfo)(struct vnode *, int32long64_t, void *, size_t, struct ucred *); int (*vn_map_lloff)(struct vnode *, caddr_t, offset_t, offset_t, uint32long64_t, uint32long64_t, struct ucred *); int (*vn_readdir_eofp)(struct vnode *, struct uio *, int *, struct ucred *); int (*vn_rdwr_attr)(struct vnode *, enum uio_rw, int32long64_t, struct uio *, ext_t , caddr_t, struct vattr *, struct vattr *, struct ucred *); int (*vn_memcntl)(struct vnode *,int, void *, struct ucred *); int (*vn_getea)(struct vnode *, const char *, struct uio *, struct ucred *); int (*vn_setea)(struct vnode *, const char*, struct uio *, int flags, struct ucred *); int (*vn_listea)(struct vnode *, struct uio *, struct ucred *); int (*vn_removeea)(struct vnode *, const char *, struct ucred *); int (*vn_statea)(struct vnode *, const char *, struct vattr *, struct ucred *); int (*vn_getxacl)(struct vnode *, uint64_t, acl_type_t *, struct uio *, size_t *, mode_t *, struct ucred *); int (*vn_setxacl)(struct vnode *, uint64_t, acl_type_t, struct uio *, mode_t, struct ucred *); int (*vn_erdwr_attr)(struct vnode *, enum uio_rw, int32long64_t, struct uio *, ext_t , caddr_t, struct vattr *, struct vattr *, struct ucred *, struct file_secattr * ); int (*vn_spareF)(); /* * External pager callout operation */ int (*pagerBackRange)(struct gnode *, offset_t, caddr_t, size_t *, size_t *, uint *); int64_t (*pagerGetFileSize)(struct gnode *); void (*pagerReadAhead)(struct gnode *, vpn_t, vpn_t *, vpn_t *, vpn_t *, boolean_t); void (*pagerReadWriteBehind)(struct gnode *, int64_t, int64_t, uint); void (*pagerEndCopy)(struct gnode *, offset_t, size_t, size_t, uint); }; typedef struct vnodeops vnodeops_t; #ifdef _KERNEL /* * Macros for the vnode operations. */ #define VNOP_ACCESS(vp, mode, who, ucred) \ vnop_access(vp, mode, who, ucred) #define VNOP_CLOSE(vp, flags, vinfo, ucred) \ vnop_close(vp, flags, vinfo, ucred) #define VNOP_CREATE(dp, vpp, flags, name, mode, vinfo, ucred) \ vnop_create(dp, vpp, flags, name, mode, vinfo, ucred) #define VNOP_FCLEAR(vp, flags, offset, length, vinfo, ucred) \ vnop_fclear(vp, flags, offset, length, vinfo, ucred) #define VNOP_FID(vp, fid, ucred) \ vnop_fid(vp, fid, ucred) #define VNOP_FSYNC(vp, flags, vinfo, ucred) \ vnop_fsync(vp, flags, vinfo, ucred) #define VNOP_FTRUNC(vp, flags, length, vinfo, ucred) \ vnop_ftrunc(vp, flags, length, vinfo, ucred) #define VNOP_GETACL(vp, uiop, ucred) \ vnop_getacl(vp, uiop, ucred) #define VNOP_GETATTR(vp, vattrp, ucred) \ vnop_getattr(vp, vattrp, ucred) #define VNOP_GETPCL(vp, uiop, ucred) \ vnop_getpcl(vp, uiop, ucred) #define VNOP_HOLD(vp) \ vnop_hold(vp) #define VNOP_IOCTL(vp, cmd, arg, flags, ext, ucred) \ vnop_ioctl(vp, cmd, arg, flags, ext, ucred) #define VNOP_LINK(vp, dp, target, ucred) \ vnop_link(vp, dp, target, ucred) #define VNOP_LOCKCTL(vp, offset, lckdat, cmd, retry_fcn, retry_id, ucred) \ vnop_lockctl(vp, offset, lckdat, cmd, retry_fcn, retry_id, ucred) #define VNOP_LOOKUP(dp, vpp, nam, flags, vattrp, ucred) \ vnop_lookup(dp, vpp, nam, flags, vattrp, ucred) #define VNOP_MAP(vp, addr, length, offset, flags, ucred) \ vnop_map(vp, addr, length, offset, flags, ucred) #define VNOP_MKDIR(vp, name, mode, ucred) \ vnop_mkdir(vp, name, mode, ucred) #define VNOP_MKNOD(vp, name, mode, dev, ucred) \ vnop_mknod(vp, name, mode, dev, ucred) #define VNOP_OPEN(vp, flags, ext, vinfop, ucred) \ vnop_open(vp, flags, ext, vinfop, ucred) #define VNOP_SELECT(vp, correl, reqevents, rtnevents, notify, vinfo, ucred) \ vnop_select(vp, correl, reqevents, rtnevents, notify, vinfo, ucred) #define VNOP_RDWR(vp, op, flags, uiop, ext, vinfo, vattrp, ucred) \ vnop_rdwr(vp, op, flags, uiop, ext, vinfo, vattrp, ucred) #define VNOP_READDIR(vp, uiop, ucred) \ vnop_readdir(vp, uiop, ucred) #define VNOP_READLINK(vp, uiop, ucred) \ vnop_readlink(vp, uiop, ucred) #define VNOP_RELE(vp) \ vnop_rele(vp) #define VNOP_REMOVE(dp, vp, name, ucred) \ vnop_remove(dp, vp, name, ucred) #define VNOP_RENAME(vp, dp, name, tvp, tdp, tname, ucred) \ vnop_rename(vp, dp, name, tvp, tdp, tname, ucred) #define VNOP_REVOKE(vp, cmd, flags, vattrp, ucred) \ vnop_revoke(vp, cmd, flags, vattrp, ucred) #define VNOP_RMDIR(vp, dp, name, ucred) \ vnop_rmdir(vp, dp, name, ucred) #define VNOP_SETACL(vp, uiop, ucred) \ vnop_setacl(vp, uiop, ucred) #define VNOP_SETATTR(vp, op, arg1, arg2, arg3, ucred) \ vnop_setattr(vp, op, arg1, arg2, arg3, ucred) #define VNOP_SETPCL(vp, uiop, ucred) \ vnop_setpcl(vp, uiop, ucred) #define VNOP_STRATEGY(vp, bp, ucred) \ vnop_strategy(vp, bp, ucred) #define VNOP_SYMLINK(vp, name, target, ucred) \ vnop_symlink(vp, name, target, ucred) #define VNOP_UNMAP(vp, addr, ucred) \ vnop_unmap(vp, addr, ucred) #define VNOP_SEEK(vp, off, ucred) \ vnop_seek(vp, off, ucred) #define VNOP_FSYNC_RANGE(vp, flags, vinfo, off, len, ucred) \ vnop_fsync_range(vp, flags, vinfo, off, len, ucred) #define VNOP_CREATE_ATTR(dp, vpp, flags, name, vap, vcf, vinfo, ucred) \ vnop_create_attr(dp, vpp, flags, name, vap, vcf, vinfo, ucred) #define VNOP_FINFO(vp, cmd, p, len, ucred) \ vnop_finfo(vp, cmd, p, len, ucred) #define VNOP_MAP_LLOFF(vp, a, len, off, mf, ff, ucred) \ vnop_map_lloff(vp, a, len, off, mf, ff, ucred) #define VNOP_READDIR_EOFP(vp, uiop, eofp, ucred) \ vnop_readdir_eofp(vp, uiop, eofp, ucred) #define VNOP_RDWR_ATTR(vp, rw, ff, uio, x, vi, pre, post, ucred) \ vnop_rdwr_attr(vp, rw, ff, uio, x, vi, pre, post, ucred) #define VNOP_ERDWR_ATTR(vp, rw, ff, uio, x, vi, pre, post, ucred, ecred) \ vnop_erdwr_attr(vp, rw, ff, uio, x, vi, pre, post, ucred, ecred) #define VNOP_MEMCNTL(vp,cmd,arg,ucred) \ vnop_memcntl(vp,cmd,arg,ucred) #define VNOP_GETEA(vp, eaName, uiop, crp) \ vnop_getea(vp, eaName, uiop, crp) #define VNOP_SETEA(vp, eaName, uiop, flag, crp) \ vnop_setea(vp, eaName, uiop, flag, crp) #define VNOP_LISTEA(vp, uiop, crp) \ vnop_listea(vp, uiop, crp) #define VNOP_REMOVEEA(vp, eaName, crp)\ vnop_removeea(vp, eaName, crp) #define VNOP_STATEA(vp, eaName, vattrp, crp) \ vnop_statea(vp, eaName, vattrp, crp) #define VNOP_SETXACL(vp,ctl_flags,acl_type,uiop,mode,crp) \ vnop_setxacl(vp,ctl_flags,acl_type,uiop,mode,crp) #define VNOP_GETXACL(vp,ctl_flag,acl_typep,uiop,sizep,modep,crp) \ vnop_getxacl(vp,ctl_flag,acl_typep,uiop,sizep,modep,crp) /* * Macro to determine if VMM read-ahead and write-behind algorithms are * enabled. */ #define gn_rdawrb(gp) (! ((gp)->gn_flags & GNF_NORDAWRB)) /* * macros for external pager call out operations */ #define PagerCallOut(gp) ((gp)->gn_flags & GNF_XPAGER) #define XPAGER_RA_TRIGGER 0x00000001 /* flags set in PagerBackRange() for use by VMM */ #define XPAGER_OVERWRITE 0x00000001 /* overwrite */ #define XPAGER_HOLE 0x00000002 /* page hole */ #define XPAGER_EXTEND 0x00000004 /* extend partially backed page */ #define XPAGER_APPEND 0x00000008 /* append new page */ #define XPAGER_MAPPED 0x00000010 /* shared with mapper */ #define XPAGER_MMAPPED 0x00000020 /* shared with mmapper */ #define XPAGER_RESERVED 0x0000FF00 /* Reserved for VMM use. */ /* return values set by VMM passed to PagerEndCopy() */ #define XPAGER_COPY_SUCCESS 0x00000000 /* range copy successful */ #define XPAGER_COPY_FAILURE 0x00010000 /* range copy failed */ /* page fault type */ #define XPAGER_MMAP 0x00000010 #define XPAGER_STORE 0x00000020 #define XPAGER_PROTECT 0x00000040 /* ReadWriteBehind types */ #define XPAGER_READ 0x00000001 #define XPAGER_WRITE 0x00000002 #define XPAGER_RELEASE 0x00000004 #define PagerBackRange(gp, offset, dest, nBytesOfRange, nBytesBacked, flags) \ (*(gp)->gn_ops->pagerBackRange) \ (gp, offset, dest, nBytesOfRange, nBytesBacked, flags) #define PagerEndCopy(gp, offset, nBytesMoved, nBytesBacked, flags) \ (*(gp)->gn_ops->pagerEndCopy) \ (gp, offset, nBytesMoved, nBytesBacked, flags) #define PagerGetFileSize(gp) (*(gp)->gn_ops->pagerGetFileSize)(gp) #define PagerReadAhead(gp, pFault, pFirst, nPage, pTripWire, tripWire) \ (*(gp)->gn_ops->pagerReadAhead) \ (gp, pFault, pFirst, nPage, pTripWire, tripWire) #define PagerReadWriteBehind(gp, offset, length, flags) \ (*(gp)->gn_ops->pagerReadWriteBehind)(gp, offset, length, flags) /* * Function prototypes for vnode op wrapper functions. */ int vnop_access( struct vnode *, int32long64_t, int32long64_t, struct ucred *); int vnop_close( struct vnode *, int32long64_t, caddr_t, struct ucred *); int vnop_create( struct vnode *, struct vnode **, int32long64_t, char *, int32long64_t, caddr_t *, struct ucred *); int vnop_fclear( struct vnode *, int32long64_t, offset_t, offset_t, char *, struct ucred *); int vnop_fid( struct vnode *, struct fileid *, struct ucred *); int vnop_fsync( struct vnode *, int32long64_t, int32long64_t, struct ucred *); int vnop_ftrunc( struct vnode *, int32long64_t, offset_t, caddr_t, struct ucred *); int vnop_getacl( struct vnode *, struct uio *, struct ucred *); int vnop_getattr( struct vnode *, struct vattr *, struct ucred *); int vnop_getattr_flags( struct vnode *, struct vattr *, struct ucred *); int vnop_getpcl( struct vnode *, struct uio *, struct ucred *); int vnop_getea( struct vnode *, const char *, struct uio *, struct ucred *); int vnop_hold( struct vnode *); int vnop_ioctl( struct vnode *, int32long64_t, caddr_t, size_t, ext_t, struct ucred *); int vnop_link( struct vnode *, struct vnode *, char *, struct ucred *); int vnop_listea( struct vnode *, struct uio *, struct ucred *); int vnop_lockctl( struct vnode *, offset_t, struct eflock *, int32long64_t, int (*)(), ulong *, struct ucred *); int vnop_lookup( struct vnode *, struct vnode **, char *, int32long64_t, struct vattr *, struct ucred *); int vnop_map( struct vnode *, caddr_t, uint32long64_t, uint32long64_t, uint32long64_t, struct ucred *); int vnop_mkdir( struct vnode *, char *, int32long64_t, struct ucred *); int vnop_mknod( struct vnode *, caddr_t, int32long64_t, dev_t, struct ucred *); int vnop_open( struct vnode *, int32long64_t, ext_t, caddr_t *, struct ucred *); int vnop_select( struct vnode *, int32long64_t, ushort, ushort *, void (*)(), caddr_t, struct ucred *); int vnop_rdwr( struct vnode *, enum uio_rw, int32long64_t, struct uio *, ext_t, caddr_t, struct vattr *, struct ucred *); int vnop_readdir( struct vnode *, struct uio *, struct ucred *); int vnop_readlink( struct vnode *, struct uio *, struct ucred *); int vnop_rele( struct vnode *); int vnop_remove( struct vnode *, struct vnode *, char *, struct ucred *); int vnop_removeea( struct vnode *, const char *, struct ucred *); int vnop_rename( struct vnode *, struct vnode *, caddr_t, struct vnode *, struct vnode *, caddr_t, struct ucred *); int vnop_revoke( struct vnode *, int32long64_t, int32long64_t, struct vattr *, struct ucred *); int vnop_rmdir( struct vnode *, struct vnode *, char *, struct ucred *); int vnop_setacl( struct vnode *, struct uio *, struct ucred *); int vnop_setattr( struct vnode *, int32long64_t, int32long64_t, int32long64_t, int32long64_t, struct ucred *); int vnop_setpcl( struct vnode *, struct uio *, struct ucred *); int vnop_setea( struct vnode *, const char *, struct uio *, int flags, struct ucred *); int vnop_statea( struct vnode *, const char *, struct vattr *, struct ucred *); int vnop_strategy( struct vnode *, struct buf *, struct ucred *); int vnop_symlink( struct vnode *, char *, char *, struct ucred *); int vnop_unmap( struct vnode *, int32long64_t, struct ucred *); int vnop_seek( struct vnode *, offset_t *, struct ucred *); int vnop_fsync_range( struct vnode *, int32long64_t, int32long64_t, offset_t, offset_t, struct ucred *); int vnop_create_attr( struct vnode *, struct vnode **, int32long64_t, char *, struct vattr *, int32long64_t, caddr_t *, struct ucred *); int vnop_finfo( struct vnode *, int32long64_t, void *, size_t, struct ucred *); int vnop_map_lloff( struct vnode *, caddr_t, offset_t, offset_t, uint32long64_t, uint32long64_t, struct ucred *); int vnop_readdir_eofp( struct vnode *, struct uio *, int *, struct ucred *); int vnop_rdwr_attr( struct vnode *, enum uio_rw, int32long64_t, struct uio *, ext_t, caddr_t, struct vattr *, struct vattr *, struct ucred *); int vnop_erdwr_attr( struct vnode *, enum uio_rw, int32long64_t, struct uio *, ext_t, caddr_t, struct vattr *, struct vattr *, struct ucred *, struct file_secattr*); int vnop_memcntl( struct vnode *, int, void *, struct ucred *); /* * vnop_memcntl command (2nd parameter) * gn_common_memcntl command (2nd parameter) */ #define F_ATTACH 1 #define F_DETACH 2 #define F_ATTINFO 3 /* * vnop_memcntl argument (3rd parameter) * gn_common_memcntl argument (3rd parameter) * related to F_ATTACH command */ typedef struct attach_desc { offset_t start; /* starting byte offset of range */ size_t nbytes; /* number of bytes in range */ uint policy; /* memory policy */ rsethandle_t rsetp; /* resource set pointer */ } attach_desc_t; /* * vnop_memcntl argument (3rd parameter) * gn_common_memcntl argument (3rd parameter) * related to F_DETACH command */ typedef struct detach_desc { offset_t start; /* starting byte offset of range */ size_t nbytes; /* number of bytes in range */ int nb_att; /* number of attachments */ } detach_desc_t; /* * vnop_memcntl argument (3rd parameter) * gn_common_memcntl argument (3rd parameter) * related to F_ATTINFO command */ typedef struct attinfo_desc { offset_t start; /* starting byte offset of range */ size_t nbytes; /* number of bytes in range */ ptr64 buf; /* output buffer for attachment info */ size_t *bufsizep; /* pointer to buffer size in bytes */ int adspace; /* USR / SYS: called from library/kservice */ } attinfo_desc_t; int vnop_getxacl(struct vnode *vp, uint64_t ctl_flags, acl_type_t *acl_type, struct uio *uiop, size_t *sizep, mode_t *modep, struct ucred *crp); int vnop_setxacl(struct vnode *vp, uint64_t ctl_flags, acl_type_t acl_type, struct uio *uiop, mode_t mode, struct ucred *crp); int vnop_setxacl_common(struct vnode *vp, uint64_t ctl_flags, acl_type_t acl_type, struct uio *uiop, mode_t mode, struct ucred *crp); void gn_opencnt(struct gnode *, long); void gn_closecnt(struct gnode *, long); void gn_mapcnt(struct gnode *, long); void gn_unmapcnt(struct gnode *, long); int gn_common_memcntl(struct gnode *, int, void *); /* * Support for NBC caching */ int nbc_vnop_hold(struct vnode *); int nbc_vnop_rele(struct vnode *); #define NBC_VNODE_MATCH(__v,__k) ((__v)->v_vfsp->vfs_number == *(uint *)(__k)) void bad_vnode_bad_caller(struct vnode *vp); static __inline void check_vnode(struct vnode *vp) { if (vp == NULL || vp->v_gnode == NULL || vp->v_gnode->gn_ops == NULL) { /* bad vnode! bad! */ bad_vnode_bad_caller(vp); } } #endif /*_KERNEL*/ #ifdef _SUN /* for Sun vnode compatibility, they expect vattr to be in vnode.h */ #include enum vcexcl { NONEXCL, EXCL}; /* (non)excl create (create) */ typedef enum vcexcl vcexcl_t; #endif /* _SUN */ /* * Convert inode formats to vnode types */ extern enum vtype iftovt_tab[]; /* these are located in stat.c */ extern int vttoif_tab[]; #define IFTOVT(M) (iftovt_tab[((M) & S_IFMT) >> 12]) #define VTTOIF(T) (vttoif_tab[(int)(T)]) #define MAKEIMODE(T, M) (VTTOIF(T) | (M)) #define VTOGP(x) ((struct gnode *)((x)->v_gnode)) /* defines for the vc_flags in vnop_create_attr */ #define VC_DEFAULT 0 #define VC_LOOKUP 1 #define VC_OPEN 2 #ifdef __cplusplus } #endif #endif /* _H_VNODE */