thread libs: also remove the static libraries from /usr/lib
[dragonfly.git] / sys / sys / vnode.h
index 2de4241..bd3a241 100644 (file)
@@ -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.80 2008/05/18 21:47:05 dillon Exp $
+ * $DragonFly: src/sys/sys/vnode.h,v 1.83 2008/09/17 21:44:19 dillon Exp $
  */
 
 #ifndef _SYS_VNODE_H_
  */
 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,30 +274,34 @@ 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
@@ -295,10 +314,6 @@ struct vnode {
 /*
  * Flags for ioflag. (high 16 bits used to ask for read-ahead and
  * help with write clustering)
- *
- * IO_NOBWILL - tells the system not to call bwillwrite() and potentially
- *             block when too many dirty buffers are present.  This is 
- *             used by recursive subsystems such as VN which might deadlock.
  */
 #define        IO_UNIT         0x0001          /* do I/O as atomic unit */
 #define        IO_APPEND       0x0002          /* append write to end */
@@ -309,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_NOBWILL      0x0200          /* do not block w/ bwillread/write */
+#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 */
@@ -318,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 */
@@ -362,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)
@@ -463,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);
@@ -480,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,
@@ -520,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);
@@ -575,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 */