From 021f7340a98fd6b009d8c40400c205f4093cae46 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 4 Jun 2006 17:33:36 +0000 Subject: [PATCH] Misc cleanup - move another namecache list scan into vfs_cache.c --- sys/kern/vfs_cache.c | 21 ++++++++++++++++++++- sys/kern/vfs_vopops.c | 14 +++----------- sys/sys/namecache.h | 3 ++- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c index 14d61b8c7a..29e029570f 100644 --- a/sys/kern/vfs_cache.c +++ b/sys/kern/vfs_cache.c @@ -67,7 +67,7 @@ * * @(#)vfs_cache.c 8.5 (Berkeley) 3/22/95 * $FreeBSD: src/sys/kern/vfs_cache.c,v 1.42.2.6 2001/10/05 20:07:03 dillon Exp $ - * $DragonFly: src/sys/kern/vfs_cache.c,v 1.70 2006/06/02 04:59:52 dillon Exp $ + * $DragonFly: src/sys/kern/vfs_cache.c,v 1.71 2006/06/04 17:33:35 dillon Exp $ */ #include @@ -979,6 +979,25 @@ cache_check_fsmid_vp(struct vnode *vp, int64_t *fsmid) return(changed); } +/* + * Obtain the FSMID for a vnode for filesystems which do not support + * a built-in FSMID. + */ +int64_t +cache_sync_fsmid_vp(struct vnode *vp) +{ + struct namecache *ncp; + + if ((ncp = TAILQ_FIRST(&vp->v_namecache)) != NULL) { + if (ncp->nc_flag & NCF_FSMID) { + ncp->nc_flag &= ~NCF_FSMID; + ++ncp->nc_fsmid; + } + return(ncp->nc_fsmid); + } + return(VNOVAL); +} + /* * Convert a directory vnode to a namecache record without any other * knowledge of the topology. This ONLY works with directory vnodes and diff --git a/sys/kern/vfs_vopops.c b/sys/kern/vfs_vopops.c index b2b027f049..cba871891d 100644 --- a/sys/kern/vfs_vopops.c +++ b/sys/kern/vfs_vopops.c @@ -32,7 +32,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $DragonFly: src/sys/kern/vfs_vopops.c,v 1.26 2006/05/12 22:26:46 dillon Exp $ + * $DragonFly: src/sys/kern/vfs_vopops.c,v 1.27 2006/06/04 17:33:35 dillon Exp $ */ #include @@ -300,7 +300,6 @@ int vop_getattr(struct vop_ops *ops, struct vnode *vp, struct vattr *vap) { struct vop_getattr_args ap; - struct namecache *ncp; int error; ap.a_head.a_desc = &vop_getattr_desc; @@ -309,15 +308,8 @@ vop_getattr(struct vop_ops *ops, struct vnode *vp, struct vattr *vap) ap.a_vap = vap; DO_OPS(ops, error, &ap, vop_getattr); - if ((ops->vv_flags & VVF_SUPPORTS_FSMID) == 0) { - if ((ncp = TAILQ_FIRST(&vp->v_namecache)) != NULL) { - if (ncp->nc_flag & NCF_FSMID) { - ncp->nc_flag &= ~NCF_FSMID; - ++ncp->nc_fsmid; - } - vap->va_fsmid = ncp->nc_fsmid; - } - } + if ((ops->vv_flags & VVF_SUPPORTS_FSMID) == 0) + vap->va_fsmid = cache_sync_fsmid_vp(vp); return(error); } diff --git a/sys/sys/namecache.h b/sys/sys/namecache.h index df310bd0e4..543ce6200e 100644 --- a/sys/sys/namecache.h +++ b/sys/sys/namecache.h @@ -62,7 +62,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $DragonFly: src/sys/sys/namecache.h,v 1.25 2006/05/20 02:42:13 dillon Exp $ + * $DragonFly: src/sys/sys/namecache.h,v 1.26 2006/06/04 17:33:36 dillon Exp $ */ #ifndef _SYS_NAMECACHE_H_ @@ -185,6 +185,7 @@ struct namecache *cache_fromdvp(struct vnode *, struct ucred *, int); int cache_fullpath(struct proc *, struct namecache *, char **, char **); void cache_update_fsmid(struct namecache *); void cache_update_fsmid_vp(struct vnode *); +int64_t cache_sync_fsmid_vp(struct vnode *); int cache_check_fsmid_vp(struct vnode *, int64_t *); int64_t cache_getnewfsmid(void); -- 2.41.0