Date: Thu, 08 Jan 1998 14:55:25 +0300 From: Dmitrij Tejblum <dima@tejblum.dnttm.rssi.ru> To: freebsd-current@freebsd.org Subject: Almost memory leak in getnewvnode Message-ID: <199801081155.OAA17797@tejblum.dnttm.rssi.ru>
next in thread | raw e-mail | index | archive | help
getnewvnode() very rare reuse vnodes from the freelist and allocate a new
vnode instead. It is because the way it use to move vnodes to the end of
the freelist is too simple. The following patch reduced number of vnodes in my
system in several times.
--- vfs_subr.c.00 Wed Jan 7 18:55:36 1998
+++ vfs_subr.c Thu Jan 8 14:08:13 1998
@@ -373,7 +373,8 @@
*/
vp = NULL;
} else {
- TAILQ_FOREACH(vp, &vnode_free_list, v_freelist) {
+ for(vp = TAILQ_FIRST(&vnode_free_list); vp; vp = tvp) {
+ tvp = TAILQ_NEXT(vp, v_freelist);
if (!simple_lock_try(&vp->v_interlock))
continue;
if (vp->v_usecount)
@@ -395,7 +396,7 @@
}
}
- TAILQ_FOREACH(tvp, &vnode_tmp_list, v_freelist) {
+ while(tvp = TAILQ_FIRST(&vnode_tmp_list)) {
TAILQ_REMOVE(&vnode_tmp_list, tvp, v_freelist);
TAILQ_INSERT_TAIL(&vnode_free_list, tvp, v_freelist);
simple_unlock(&tvp->v_interlock);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199801081155.OAA17797>
