From 6de32ba26745bfac4b4f585da31f9c7d1c184109 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Mon, 13 Jul 2009 07:57:26 -0700 Subject: [PATCH] vnode - move v_pollinfo.vpi_token to v_token * 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 | 2 +- sys/kern/vfs_subr.c | 6 +++--- sys/sys/vnode.h | 9 ++++++++- sys/vfs/gnu/ext2fs/ext2_vnops.c | 4 ++-- sys/vfs/hammer/hammer_vnops.c | 4 ++-- sys/vfs/ufs/ufs_vnops.c | 4 ++-- 6 files changed, 18 insertions(+), 11 deletions(-) diff --git a/sys/kern/vfs_lock.c b/sys/kern/vfs_lock.c index 79d5d100a6..78a9bfa134 100644 --- a/sys/kern/vfs_lock.c +++ b/sys/kern/vfs_lock.c @@ -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); diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index c52f65d26f..c97534248b 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -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); diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index ce3f111426..e1534eaf21 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -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 */ diff --git a/sys/vfs/gnu/ext2fs/ext2_vnops.c b/sys/vfs/gnu/ext2fs/ext2_vnops.c index 128685404c..65b71a97fb 100644 --- a/sys/vfs/gnu/ext2fs/ext2_vnops.c +++ b/sys/vfs/gnu/ext2fs/ext2_vnops.c @@ -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); diff --git a/sys/vfs/hammer/hammer_vnops.c b/sys/vfs/hammer/hammer_vnops.c index f6612ee187..30d8bef97c 100644 --- a/sys/vfs/hammer/hammer_vnops.c +++ b/sys/vfs/hammer/hammer_vnops.c @@ -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); diff --git a/sys/vfs/ufs/ufs_vnops.c b/sys/vfs/ufs/ufs_vnops.c index 1bc3a737fa..352b3be6d4 100644 --- a/sys/vfs/ufs/ufs_vnops.c +++ b/sys/vfs/ufs/ufs_vnops.c @@ -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); -- 2.41.0