Module Name: src Committed By: hannken Date: Sun Jan 11 17:28:22 UTC 2015
Modified Files: src/sys/ufs/chfs: chfs_gc.c chfs_vnode.c Log Message: Convert a bogus mnt_vnodelist traversal to vfs_vnode_iterator. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/sys/ufs/chfs/chfs_gc.c cvs rdiff -u -r1.12 -r1.13 src/sys/ufs/chfs/chfs_vnode.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/ufs/chfs/chfs_gc.c diff -u src/sys/ufs/chfs/chfs_gc.c:1.7 src/sys/ufs/chfs/chfs_gc.c:1.8 --- src/sys/ufs/chfs/chfs_gc.c:1.7 Mon Sep 8 17:41:11 2014 +++ src/sys/ufs/chfs/chfs_gc.c Sun Jan 11 17:28:22 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: chfs_gc.c,v 1.7 2014/09/08 17:41:11 joerg Exp $ */ +/* $NetBSD: chfs_gc.c,v 1.8 2015/01/11 17:28:22 hannken Exp $ */ /*- * Copyright (c) 2010 Department of Software Engineering, @@ -251,6 +251,7 @@ chfs_gc_fetch_inode(struct chfs_mount *c dbg_gc("vp to ip\n"); ip = VTOI(vp); KASSERT(ip); + vrele(vp); return ip; } @@ -970,6 +971,7 @@ chfs_gcollect_dirent(struct chfs_mount * } ip = VTOI(vnode); + vrele(vnode); /* Remove and obsolete the previous version. */ mutex_enter(&chmp->chm_lock_vnocache); @@ -1006,7 +1008,7 @@ chfs_gcollect_deletion_dirent(struct chf nref_len = chfs_nref_len(chmp, cheb, fd->nref); - (void)chfs_vnode_lookup(chmp, fd->vno); + /* XXX This was a noop (void)chfs_vnode_lookup(chmp, fd->vno); */ /* Find it in parent dirents. */ for (nref = parent->chvc->dirents; Index: src/sys/ufs/chfs/chfs_vnode.c diff -u src/sys/ufs/chfs/chfs_vnode.c:1.12 src/sys/ufs/chfs/chfs_vnode.c:1.13 --- src/sys/ufs/chfs/chfs_vnode.c:1.12 Sun Nov 9 18:23:28 2014 +++ src/sys/ufs/chfs/chfs_vnode.c Sun Jan 11 17:28:22 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: chfs_vnode.c,v 1.12 2014/11/09 18:23:28 maxv Exp $ */ +/* $NetBSD: chfs_vnode.c,v 1.13 2015/01/11 17:28:22 hannken Exp $ */ /*- * Copyright (c) 2010 Department of Software Engineering, @@ -42,18 +42,24 @@ #include <miscfs/genfs/genfs.h> /* chfs_vnode_lookup - lookup for a vnode */ +static bool +chfs_vnode_lookup_selector(void *ctx, struct vnode *vp) +{ + ino_t *ino = ctx; + + return (VTOI(vp) != NULL && VTOI(vp)->ino == *ino); +} struct vnode * chfs_vnode_lookup(struct chfs_mount *chmp, ino_t vno) { + struct vnode_iterator *marker; struct vnode *vp; - struct chfs_inode *ip; - TAILQ_FOREACH(vp, &chmp->chm_fsmp->mnt_vnodelist, v_mntvnodes) { - ip = VTOI(vp); - if (ip && ip->ino == vno) - return vp; - } - return NULL; + vfs_vnode_iterator_init(chmp->chm_fsmp, &marker); + vp = vfs_vnode_iterator_next(marker, chfs_vnode_lookup_selector, &vno); + vfs_vnode_iterator_destroy(marker); + + return vp; } /* chfs_readvnode - reads a vnode from the flash and setups its inode */