thread libs: also remove the static libraries from /usr/lib
[dragonfly.git] / sys / sys / vnode.h
index d12a042..bd3a241 100644 (file)
  */
 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 */
-#define VPFSROOT       0x00100 /* may be a pseudo filesystem root */
-/* 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
@@ -314,14 +333,7 @@ struct vnode {
 /*
  * Modes.  Note that these V-modes must match file S_I*USR, SUID, SGID,
  * and SVTX flag bits.
- *
- * VOWN, VCREATE, VDELETE, and VEXCL may only be used in naccess() calls.
  */
-#define VOWN   0100000         /* succeed if file owner or (other flags) */
-#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 */
@@ -359,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)
@@ -460,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,6 +490,7 @@ 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,
@@ -518,18 +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 */