kernel - Remove kernel-level ccms module (it will be moved into hammer2)
[dragonfly.git] / sys / sys / vnode.h
index 247096d..7a11631 100644 (file)
@@ -46,8 +46,8 @@
 #ifndef _SYS_LOCK_H_
 #include <sys/lock.h>
 #endif
-#ifndef _SYS_SELINFO_H_
-#include <sys/selinfo.h>
+#ifndef _SYS_EVENT_H_
+#include <sys/event.h>
 #endif
 #ifndef _SYS_BIOTRACK_H_
 #include <sys/biotrack.h>
@@ -79,9 +79,6 @@
 #ifndef _SYS_SYSREF_H_
 #include <sys/sysref.h>
 #endif
-#ifndef _SYS_CCMS_H_
-#include <sys/ccms.h>
-#endif
 #ifndef _MACHINE_LOCK_H_
 #include <machine/lock.h>
 #endif
@@ -106,69 +103,6 @@ struct mountctl_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.
- * Range locks will eventually be integrated into the clustered cache
- * coherency infrastructure.
- *
- * We use a simple data structure for now, but eventually this should 
- * probably be a btree or red-black tree.
- */
-struct vrangelock;
-
-TAILQ_HEAD(vrangelock_list, vrangelock);
-
-struct vrangehead {
-       struct vrangelock_list  vh_list;
-};
-
-struct vrangelock {
-       TAILQ_ENTRY(vrangelock) vr_node;
-       int             vr_flags;
-       off_t           vr_offset;
-       off_t           vr_length;
-};
-
-#define RNGL_WAITING   0x0001          /* waiting for lock, else has lock */
-#define RNGL_CHECK     0x0002          /* check for work on unlock */
-#define RNGL_SHARED    0x0004          /* shared lock, else exclusive */
-#define RNGL_ONLIST    0x0008          /* sanity check */
-
-static __inline
-void
-vrange_init(struct vrangelock *vr, int flags, off_t offset, off_t length)
-{
-       vr->vr_flags = flags;
-       vr->vr_offset = offset;
-       vr->vr_length = length;
-}
-
-#ifdef _KERNEL
-
-void   vrange_lock(struct vnode *vp, struct vrangelock *vr);
-void   vrange_unlock(struct vnode *vp, struct vrangelock *vr);
-
-static __inline
-void
-vrange_lock_shared(struct vnode *vp, struct vrangelock *vr, 
-                   off_t offset, off_t length)
-{
-       vrange_init(vr, RNGL_SHARED, offset, length);
-       vrange_lock(vp, vr);
-}
-
-static __inline
-void
-vrange_lock_excl(struct vnode *vp, struct vrangelock *vr,
-                   off_t offset, off_t length)
-{
-       vrange_init(vr, 0, offset, length);
-       vrange_lock(vp, vr);
-}
-
-#endif
-
 /*
  * The vnode infrastructure is being reorgranized.  Most reference-related
  * fields are locked by the BGL, and most file I/O related operations and
@@ -207,16 +141,17 @@ vrange_lock_excl(struct vnode *vp, struct vrangelock *vr,
  *      associated with the vnode.  Otherwise it will be set to NOOFFSET.
  *
  * NOTE: The following fields require a spin or token lock.  Note that
- *      additional subsystems may use v_token or v_spinlock for other
+ *      additional subsystems may use v_token or v_spin for other
  *      purposes, e.g. vfs/fifofs/fifo_vnops.c
  *
- *      v_namecache    v_spinlock
+ *      v_namecache    v_spin
  *      v_rb*          v_token
  */
 RB_HEAD(buf_rb_tree, buf);
 RB_HEAD(buf_rb_hash, buf);
 
 struct vnode {
+       struct spinlock v_spin;
        int     v_flag;                         /* vnode flags (see below) */
        int     v_writecount;
        int     v_opencount;                    /* number of explicit opens */
@@ -256,18 +191,14 @@ struct vnode {
        void    *v_data;                        /* private data for fs */
        struct namecache_list v_namecache;      /* (S) associated nc entries */
        struct  {
-               struct  selinfo vpi_selinfo;    /* identity of poller(s) */
-               short   vpi_events;             /* what they are looking for */
-               short   vpi_revents;            /* what has happened */
+               struct  kqinfo vpi_kqinfo;      /* identity of poller(s) */
        } v_pollinfo;
        struct vmresident *v_resident;          /* optional vmresident */
-       struct vrangehead v_range;              /* range lock */
-       struct ccms_dataspace v_ccms;           /* cache coherency */
+       struct mount *v_pfsmp;                  /* real mp for pfs/nullfs mt */
 #ifdef DEBUG_LOCKS
        const char *filename;                   /* Source file doing locking */
        int line;                               /* Line number doing locking */
 #endif
-       void    *v_xaddr;
 };
 #define        v_socket        v_un.vu_socket
 #define v_umajor       v_un.vu_cdev.vu_umajor
@@ -275,7 +206,6 @@ struct vnode {
 #define        v_rdev          v_un.vu_cdev.vu_cdevinfo
 #define        v_cdevnext      v_un.vu_cdev.vu_cdevnext
 #define        v_fifoinfo      v_un.vu_fifoinfo
-#define        v_spinlock      v_lock.lk_spinlock
 
 /*
  * Vnode flags.
@@ -331,6 +261,7 @@ struct vnode {
 #define        IO_DIRECT       0x0100          /* attempt to bypass buffer cache */
 #define        IO_RECURSE      0x0200          /* possibly device-recursive (vn) */
 #define        IO_CORE         0x0400          /* I/O is part of core dump */
+#define        IO_NRDELAY      0x0800          /* do not block on disk reads */
 
 #define        IO_SEQMAX       0x7F            /* seq heuristic max value */
 #define        IO_SEQSHIFT     16              /* seq heuristic in upper 16 bits */
@@ -462,6 +393,7 @@ struct ucred;
 struct uio;
 struct vattr;
 struct vnode;
+struct syncer_ctx;
 
 struct vnode *getsynthvnode(const char *devname);
 void   addaliasu (struct vnode *vp, int x, int y);
@@ -498,7 +430,8 @@ 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);
 void   vnode_pager_setsize (struct vnode *, vm_ooffset_t);
-int    nvtruncbuf (struct vnode *vp, off_t length, int blksize, int boff);
+int    nvtruncbuf (struct vnode *vp, off_t length, int blksize, int boff,
+               int trivial);
 int    nvextendbuf(struct vnode *vp, off_t olength, off_t nlength,
                int oblksize, int nblksize,
                int oboff, int nboff, int trivial);
@@ -514,26 +447,32 @@ int       vmaxiosize (struct vnode *vp);
 void   vn_strategy(struct vnode *vp, struct bio *bio);
 int    vn_cache_strategy(struct vnode *vp, struct bio *bio);
 int    vn_close (struct vnode *vp, int flags);
+void   vn_gone (struct vnode *vp);
 int    vn_isdisk (struct vnode *vp, int *errp);
-int    vn_lock (struct vnode *vp, int flags);
 int    vn_islocked (struct vnode *vp);
 int    vn_islocked_unlock (struct vnode *vp);
 void   vn_islocked_relock (struct vnode *vp, int vpls);
+int    vn_lock (struct vnode *vp, int flags);
 void   vn_unlock (struct vnode *vp);
+
 #ifdef DEBUG_LOCKS
 int    debug_vn_lock (struct vnode *vp, int flags,
                const char *filename, int line);
 #define vn_lock(vp,flags)      debug_vn_lock(vp, flags, __FILE__, __LINE__)
 #endif
 
+/*#define DEBUG_VN_UNLOCK*/
+#ifdef DEBUG_VN_UNLOCK
+void   debug_vn_unlock (struct vnode *vp,
+               const char *filename, int line);
+#define vn_unlock(vp)          debug_vn_unlock(vp, __FILE__, __LINE__)
+#endif
+
 int    vn_get_namelen(struct vnode *, int *);
 void   vn_setspecops (struct file *fp);
 int    vn_fullpath (struct proc *p, struct vnode *vn, char **retbuf, char **freebuf, int guess);
 int    vn_open (struct nlookupdata *ndp, struct file *fp, int fmode, int cmode);
 int    vn_opendisk (const char *devname, int fmode, struct vnode **vpp);
-void   vn_pollevent (struct vnode *vp, int events);
-void   vn_pollgone (struct vnode *vp);
-int    vn_pollrecord (struct vnode *vp, int events);
 int    vn_rdwr (enum uio_rw rw, struct vnode *vp, caddr_t base,
            int len, off_t offset, enum uio_seg segflg, int ioflg,
            struct ucred *cred, int *aresid);
@@ -593,13 +532,24 @@ void      vrele (struct vnode *vp);
 void   vsetflags (struct vnode *vp, int flags);
 void   vclrflags (struct vnode *vp, int flags);
 
+/*#define DEBUG_VPUT*/
+#ifdef DEBUG_VPUT
+void   debug_vput (struct vnode *vp, const char *filename, int line);
+#define vput(vp)               debug_vput(vp, __FILE__, __LINE__)
+#endif
+
 void   vfs_subr_init(void);
 void   vfs_mount_init(void);
 void   vfs_lock_init(void);
 void   vfs_sync_init(void);
 void   mount_init(struct mount *mp);
 
-void   vn_syncer_add_to_worklist(struct vnode *, int);
+void   vn_syncer_add(struct vnode *, int);
+void   vn_syncer_remove(struct vnode *);
+void   vn_syncer_thr_create(struct mount *);
+void   *vn_syncer_thr_getctx(struct mount *);
+void   vn_syncer_thr_stop(void *);
+
 void   vnlru_proc_wait(void);
 
 extern struct vop_ops default_vnode_vops;