X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/blobdiff_plain/26fc83de6d3718da96da00d616394bcb0b774f21..aa21a6a5b63c983a247dc24e03bc413bcd5372b8:/sys/sys/vnode.h diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index 3f3ad959cf..bd3a241006 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -32,7 +32,7 @@ * * @(#)vnode.h 8.7 (Berkeley) 2/4/94 * $FreeBSD: src/sys/sys/vnode.h,v 1.111.2.19 2002/12/29 18:19:53 dillon Exp $ - * $DragonFly: src/sys/sys/vnode.h,v 1.77 2007/08/28 01:04:31 dillon Exp $ + * $DragonFly: src/sys/sys/vnode.h,v 1.83 2008/09/17 21:44:19 dillon Exp $ */ #ifndef _SYS_VNODE_H_ @@ -98,6 +98,14 @@ */ TAILQ_HEAD(buflists, buf); +/* + * Struct for mount options to printable formats. + */ +struct mountctl_opt { + int o_opt; + const char *o_name; +}; + /* * Range locks protect offset ranges in files and directories at a high * level, allowing the actual I/O to be broken down into smaller pieces. @@ -178,6 +186,13 @@ vrange_lock_excl(struct vnode *vp, struct vrangelock *vr, * deal with clustered cache coherency issues and, more immediately, to * protect operations associated with the kernel-managed journaling module. * + * Certain fields within the vnode structure requires v_token to be held. + * + * v_rbclean_tree + * v_rbdirty_tree + * v_rbhash_tree + * v_pollinfo + * * NOTE: The vnode operations vector, v_ops, is a double-indirect that * typically points to &v_mount->mnt_vn_use_ops. We use a double * pointer because mnt_vn_use_ops may change dynamically when e.g. @@ -224,11 +239,11 @@ struct vnode { int v_clen; /* length of current cluster */ struct vm_object *v_object; /* Place to store VM object */ struct lock v_lock; /* file/dir ops lock */ + struct lwkt_token v_token; /* structural access */ enum vtagtype v_tag; /* type of underlying data */ void *v_data; /* private data for fs */ struct namecache_list v_namecache; /* associated nc entries */ struct { - struct lwkt_token vpi_token; /* lock to protect below */ struct selinfo vpi_selinfo; /* identity of poller(s) */ short vpi_events; /* what they are looking for */ short vpi_revents; /* what has happened */ @@ -259,37 +274,42 @@ struct vnode { /* * Vnode flags. */ -#define VROOT 0x00001 /* root of its file system */ -#define VTEXT 0x00002 /* vnode is a pure text prototype */ -#define VSYSTEM 0x00004 /* vnode being used by kernel */ -#define VISTTY 0x00008 /* vnode represents a tty */ -#define VCTTYISOPEN 0x00010 /* controlling terminal tty is open */ -#define VCKPT 0x00020 /* checkpoint-restored vnode */ -#define VFSMID 0x00040 /* request FSMID update */ -#define VMAYHAVELOCKS 0x00080 /* there may be posix or flock locks on vp */ -/* open for business 0x00100 */ -/* open for business 0x00200 */ -/* open for business 0x00400 */ -/* open for business 0x00800 */ -#define VCACHED 0x01000 /* No active references but has cache value */ -#define VOBJBUF 0x02000 /* Allocate buffers in VM object */ -#define VINACTIVE 0x04000 /* The vnode is inactive (did VOP_INACTIVE) */ -#define VAGE 0x08000 /* Insert vnode at head of free list */ -#define VOLOCK 0x10000 /* vnode is locked waiting for an object */ -#define VOWANT 0x20000 /* a process is waiting for VOLOCK */ -#define VRECLAIMED 0x40000 /* This vnode has been destroyed */ -#define VFREE 0x80000 /* This vnode is on the freelist */ -/* open for business 0x100000 */ -#define VONWORKLST 0x200000 /* On syncer work-list */ -#define VMOUNT 0x400000 /* Mount in progress */ -#define VOBJDIRTY 0x800000 /* object might be dirty */ +#define VROOT 0x00000001 /* root of its file system */ +#define VTEXT 0x00000002 /* vnode is a pure text prototype */ +#define VSYSTEM 0x00000004 /* vnode being used by kernel */ +#define VISTTY 0x00000008 /* vnode represents a tty */ +#define VCTTYISOPEN 0x00000010 /* controlling terminal tty is open */ +#define VCKPT 0x00000020 /* checkpoint-restored vnode */ +#define VFSMID 0x00000040 /* request FSMID update */ +#define VMAYHAVELOCKS 0x00000080 /* maybe posix or flock locks on vp */ +#define VPFSROOT 0x00000100 /* may be a pseudo filesystem root */ +/* open for business 0x00000200 */ +/* open for business 0x00000400 */ +/* open for business 0x00000800 */ +#define VCACHED 0x00001000 /* No active references but has cache value */ +#define VOBJBUF 0x00002000 /* Allocate buffers in VM object */ +#define VINACTIVE 0x00004000 /* The vnode is inactive (did VOP_INACTIVE) */ +#define VAGE 0x00008000 /* Insert vnode at head of free list */ +#define VOLOCK 0x00010000 /* vnode is locked waiting for an object */ +#define VOWANT 0x00020000 /* a process is waiting for VOLOCK */ +#define VRECLAIMED 0x00040000 /* This vnode has been destroyed */ +#define VFREE 0x00080000 /* This vnode is on the freelist */ +#define VNOTSEEKABLE 0x00100000 /* rd/wr ignores file offset */ +#define VONWORKLST 0x00200000 /* On syncer work-list */ +#define VMOUNT 0x00400000 /* Mount in progress */ +#define VOBJDIRTY 0x00800000 /* object might be dirty */ + +#define VMP_READ 0x01000000 /* supports MPSAFE read */ +#define VMP_WRITE 0x02000000 /* supports MPSAFE write */ +#define VMP_GETATTR 0x04000000 /* supports MPSAFE getattr */ /* * vmntvnodescan() flags */ -#define VMSC_GETVP 1 -#define VMSC_GETVX 2 +#define VMSC_GETVP 0x01 +#define VMSC_GETVX 0x02 #define VMSC_NOWAIT 0x10 +#define VMSC_ONEPASS 0x20 /* * Flags for ioflag. (high 16 bits used to ask for read-ahead and @@ -304,7 +324,7 @@ struct vnode { #define IO_INVAL 0x0040 /* invalidate after I/O */ #define IO_ASYNC 0x0080 /* bawrite rather then bdwrite */ #define IO_DIRECT 0x0100 /* attempt to bypass buffer cache */ -#define IO_NOWDRAIN 0x0200 /* do not block on wdrain */ +#define IO_RECURSE 0x0200 /* possibly device-recursive (vn) */ #define IO_CORE 0x0400 /* I/O is part of core dump */ #define IO_SEQMAX 0x7F /* seq heuristic max value */ @@ -313,13 +333,7 @@ struct vnode { /* * Modes. Note that these V-modes must match file S_I*USR, SUID, SGID, * and SVTX flag bits. - * - * VCREATE, VDELETE, and VEXCL may only be used in naccess() calls. */ -#define VDELETE 040000 /* delete if the file/dir exists */ -#define VCREATE 020000 /* create if the file/dir does not exist */ -#define VEXCL 010000 /* error if the file/dir already exists */ - #define VSUID 04000 /* set user id on execution */ #define VSGID 02000 /* set group id on execution */ #define VSVTX 01000 /* save swapped text even after use */ @@ -357,7 +371,6 @@ extern int vttoif_tab[]; #define WRITECLOSE 0x0004 /* vflush: only close writable files */ #define DOCLOSE 0x0008 /* vclean: close active files */ #define V_SAVE 0x0001 /* vinvalbuf: sync file first */ -#define REVOKEALL 0x0001 /* vop_revoke: revoke all aliases */ #ifdef DIAGNOSTIC #define VATTR_NULL(vap) vattr_null(vap) @@ -458,7 +471,6 @@ int getnewvnode (enum vtagtype tag, struct mount *mp, int getspecialvnode (enum vtagtype tag, struct mount *mp, struct vop_ops **ops, struct vnode **vpp, int timo, int lkflags); -int spec_vnoperate (struct vop_generic_args *); int speedup_syncer (void); void vattr_null (struct vattr *vap); int vcount (struct vnode *vp); @@ -475,8 +487,10 @@ int vmntvnodescan(struct mount *mp, int flags, void insmntque(struct vnode *vp, struct mount *mp); void vclean_vxlocked (struct vnode *vp, int flags); +void vclean_unlocked (struct vnode *vp); void vgone_vxlocked (struct vnode *vp); void vupdatefsmid (struct vnode *vp); +int vrevoke (struct vnode *vp, struct ucred *cred); int vinvalbuf (struct vnode *vp, int save, int slpflag, int slptimeo); int vtruncbuf (struct vnode *vp, off_t length, int blksize); int vfsync(struct vnode *vp, int waitfor, int passes, @@ -485,6 +499,7 @@ int vfsync(struct vnode *vp, int waitfor, int passes, int vinitvmio(struct vnode *vp, off_t filesize); void vprint (char *label, struct vnode *vp); int vrecycle (struct vnode *vp); +int vmaxiosize (struct vnode *vp); void vn_strategy(struct vnode *vp, struct bio *bio); int vn_close (struct vnode *vp, int flags); int vn_isdisk (struct vnode *vp, int *errp); @@ -514,16 +529,21 @@ int vn_rdwr_inchunks (enum uio_rw rw, struct vnode *vp, caddr_t base, int vn_stat (struct vnode *vp, struct stat *sb, struct ucred *cred); cdev_t vn_todev (struct vnode *vp); void vfs_timestamp (struct timespec *); +size_t vfs_flagstostr(int flags, const struct mountctl_opt *optp, char *buf, size_t len, int *errorp); +void vn_mark_atime(struct vnode *vp, struct thread *td); int vn_writechk (struct vnode *vp, struct nchandle *nch); int ncp_writechk(struct nchandle *nch); int vop_stdopen (struct vop_open_args *ap); int vop_stdclose (struct vop_close_args *ap); +int vop_stdmountctl(struct vop_mountctl_args *ap); int vop_stdgetpages(struct vop_getpages_args *ap); int vop_stdputpages(struct vop_putpages_args *ap); +int vop_stdmarkatime(struct vop_markatime_args *ap); +int vop_stdnoread(struct vop_read_args *ap); +int vop_stdnowrite(struct vop_write_args *ap); int vop_nopoll (struct vop_poll_args *ap); int vop_stdpathconf (struct vop_pathconf_args *ap); int vop_stdpoll (struct vop_poll_args *ap); -int vop_stdrevoke (struct vop_revoke_args *ap); int vop_eopnotsupp (struct vop_generic_args *ap); int vop_ebadf (struct vop_generic_args *ap); int vop_einval (struct vop_generic_args *ap); @@ -569,11 +589,9 @@ void vn_syncer_add_to_worklist(struct vnode *, int); void vnlru_proc_wait(void); extern struct vop_ops default_vnode_vops; -extern struct vop_ops spec_vnode_vops; extern struct vop_ops dead_vnode_vops; extern struct vop_ops *default_vnode_vops_p; -extern struct vop_ops *spec_vnode_vops_p; extern struct vop_ops *dead_vnode_vops_p; #endif /* _KERNEL */