vnode - move v_pollinfo.vpi_token to v_token
authorMatthew Dillon <dillon@apollo.backplane.com>
Mon, 13 Jul 2009 14:57:26 +0000 (07:57 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Mon, 13 Jul 2009 14:57:26 +0000 (07:57 -0700)
* Rename the lwkt_token used for the vnode's v_pollinfo for general use by
  the vnode.  This token will soon be used to lock the buffer cache.

sys/kern/vfs_lock.c
sys/kern/vfs_subr.c
sys/sys/vnode.h
sys/vfs/gnu/ext2fs/ext2_vnops.c
sys/vfs/hammer/hammer_vnops.c
sys/vfs/ufs/ufs_vnops.c

index 79d5d10..78a9bfa 100644 (file)
@@ -273,7 +273,7 @@ vnode_ctor(void *obj, void *private, int ocflags)
 {
        struct vnode *vp = obj;
 
-       lwkt_token_init(&vp->v_pollinfo.vpi_token);
+       lwkt_token_init(&vp->v_token);
        lockinit(&vp->v_lock, "vnode", 0, 0);
        ccms_dataspace_init(&vp->v_ccms);
        TAILQ_INIT(&vp->v_namecache);
index c52f65d..c975342 100644 (file)
@@ -1994,7 +1994,7 @@ vn_pollrecord(struct vnode *vp, int events)
 
        KKASSERT(curthread->td_proc != NULL);
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        if (vp->v_pollinfo.vpi_revents & events) {
                /*
                 * This leaves events we are not interested
@@ -2026,7 +2026,7 @@ vn_pollevent(struct vnode *vp, int events)
 {
        lwkt_tokref ilock;
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        if (vp->v_pollinfo.vpi_events & events) {
                /*
                 * We clear vpi_events so that we don't
@@ -2056,7 +2056,7 @@ vn_pollgone(struct vnode *vp)
 {
        lwkt_tokref ilock;
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        if (vp->v_pollinfo.vpi_events) {
                vp->v_pollinfo.vpi_events = 0;
                selwakeup(&vp->v_pollinfo.vpi_selinfo);
index ce3f111..e1534ea 100644 (file)
@@ -178,6 +178,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  (upcoming)
+ *     v_rbdirty_tree  (upcoming)
+ *     v_rbhash_tree   (upcoming)
+ *     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 +231,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 */
index 1286854..65b71a9 100644 (file)
@@ -2100,7 +2100,7 @@ ext2_kqfilter(struct vop_kqfilter_args *ap)
 
        kn->kn_hook = (caddr_t)vp;
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        SLIST_INSERT_HEAD(&vp->v_pollinfo.vpi_selinfo.si_note, kn, kn_selnext);
        lwkt_reltoken(&ilock);
 
@@ -2113,7 +2113,7 @@ filt_ext2detach(struct knote *kn)
        struct vnode *vp = (struct vnode *)kn->kn_hook;
        lwkt_tokref ilock;
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        SLIST_REMOVE(&vp->v_pollinfo.vpi_selinfo.si_note,
            kn, knote, kn_selnext);
        lwkt_reltoken(&ilock);
index f6612ee..30d8bef 100644 (file)
@@ -3069,7 +3069,7 @@ hammer_vop_kqfilter(struct vop_kqfilter_args *ap)
 
        kn->kn_hook = (caddr_t)vp;
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        SLIST_INSERT_HEAD(&vp->v_pollinfo.vpi_selinfo.si_note, kn, kn_selnext);
        lwkt_reltoken(&ilock);
 
@@ -3082,7 +3082,7 @@ filt_hammerdetach(struct knote *kn)
        struct vnode *vp = (void *)kn->kn_hook;
        lwkt_tokref ilock;
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        SLIST_REMOVE(&vp->v_pollinfo.vpi_selinfo.si_note,
                     kn, knote, kn_selnext);
        lwkt_reltoken(&ilock);
index 1bc3a73..352b3be 100644 (file)
@@ -2298,7 +2298,7 @@ ufs_kqfilter(struct vop_kqfilter_args *ap)
 
        kn->kn_hook = (caddr_t)vp;
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        SLIST_INSERT_HEAD(&vp->v_pollinfo.vpi_selinfo.si_note, kn, kn_selnext);
        lwkt_reltoken(&ilock);
 
@@ -2311,7 +2311,7 @@ filt_ufsdetach(struct knote *kn)
        struct vnode *vp = (struct vnode *)kn->kn_hook;
        lwkt_tokref ilock;
 
-       lwkt_gettoken(&ilock, &vp->v_pollinfo.vpi_token);
+       lwkt_gettoken(&ilock, &vp->v_token);
        SLIST_REMOVE(&vp->v_pollinfo.vpi_selinfo.si_note,
            kn, knote, kn_selnext);
        lwkt_reltoken(&ilock);