Module Name: src Committed By: hannken Date: Fri May 30 08:46:00 UTC 2014
Modified Files: src/sys/kern: vfs_mount.c Log Message: vfs_vnode_iterator_next(): if a vnode is reclaiming (VI_XLOCK) skip the filter. Vget() will wait until the vnode disappeared. No more "dangling vnode" panics on unmount. To generate a diff of this commit: cvs rdiff -u -r1.29 -r1.30 src/sys/kern/vfs_mount.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_mount.c diff -u src/sys/kern/vfs_mount.c:1.29 src/sys/kern/vfs_mount.c:1.30 --- src/sys/kern/vfs_mount.c:1.29 Sat May 24 16:34:04 2014 +++ src/sys/kern/vfs_mount.c Fri May 30 08:46:00 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_mount.c,v 1.29 2014/05/24 16:34:04 christos Exp $ */ +/* $NetBSD: vfs_mount.c,v 1.30 2014/05/30 08:46:00 hannken Exp $ */ /*- * Copyright (c) 1997-2011 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.29 2014/05/24 16:34:04 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.30 2014/05/30 08:46:00 hannken Exp $"); #define _VFS_VNODE_PRIVATE @@ -393,9 +393,8 @@ again: return NULL; } mutex_enter(vp->v_interlock); - while (ISSET(vp->v_iflag, VI_MARKER) || - ISSET(vp->v_iflag, VI_XLOCK) || - (f && !(*f)(cl, vp))) { + if (ISSET(vp->v_iflag, VI_MARKER) || + (f && !ISSET(vp->v_iflag, VI_XLOCK) && !(*f)(cl, vp))) { mutex_exit(vp->v_interlock); vp = TAILQ_NEXT(vp, v_mntvnodes); goto again;