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 */