Module Name: src Committed By: bouyer Date: Thu Jan 14 22:41:53 UTC 2010
Modified Files: src/sys/kern: vfs_subr.c Log Message: Remove KASSERT(vp->v_usecount == 1) in getnewvnode() and ungetnewvnode(). Another process could be vget()ing the vnode and bump v_usecount while getcleanvnode() is vclean()ing it (as vclean drops the interlock). vget() will then wait for VI_XLOCK or VI_FREEING to clear; and we could test this assertion while the other process is still slepping. We could even end up in ungetnewvnode() before this other process got a chance to run. To generate a diff of this commit: cvs rdiff -u -r1.395 -r1.396 src/sys/kern/vfs_subr.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/kern/vfs_subr.c diff -u src/sys/kern/vfs_subr.c:1.395 src/sys/kern/vfs_subr.c:1.396 --- src/sys/kern/vfs_subr.c:1.395 Fri Jan 8 13:07:26 2010 +++ src/sys/kern/vfs_subr.c Thu Jan 14 22:41:52 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_subr.c,v 1.395 2010/01/08 13:07:26 pooka Exp $ */ +/* $NetBSD: vfs_subr.c,v 1.396 2010/01/14 22:41:52 bouyer Exp $ */ /*- * Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.395 2010/01/08 13:07:26 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.396 2010/01/14 22:41:52 bouyer Exp $"); #include "opt_ddb.h" #include "opt_compat_netbsd.h" @@ -641,7 +641,6 @@ vp->v_socket = NULL; } - KASSERT(vp->v_usecount == 1); KASSERT(vp->v_freelisthd == NULL); KASSERT(LIST_EMPTY(&vp->v_nclist)); KASSERT(LIST_EMPTY(&vp->v_dnclist)); @@ -682,7 +681,6 @@ ungetnewvnode(vnode_t *vp) { - KASSERT(vp->v_usecount == 1); KASSERT(vp->v_data == NULL); KASSERT(vp->v_freelisthd == NULL);