Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Mar 2015 09:22:06 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r279685 - in stable/10/sys: fs/devfs kern sys
Message-ID:  <201503060922.t269M6x3027800@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Fri Mar  6 09:22:05 2015
New Revision: 279685
URL: https://svnweb.freebsd.org/changeset/base/279685

Log:
  MFC r279362:
  The VNASSERT in vflush() FORCECLOSE case is trying to panic early to
  prevent errors from yanking devices out from under filesystems.  Only
  care about special vnodes on devfs, special nodes on other kinds of
  filesystems do not have special properties.

Modified:
  stable/10/sys/fs/devfs/devfs_vnops.c
  stable/10/sys/kern/vfs_subr.c
  stable/10/sys/sys/vnode.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- stable/10/sys/fs/devfs/devfs_vnops.c	Fri Mar  6 05:50:39 2015	(r279684)
+++ stable/10/sys/fs/devfs/devfs_vnops.c	Fri Mar  6 09:22:05 2015	(r279685)
@@ -63,7 +63,6 @@
 #include <sys/vnode.h>
 
 static struct vop_vector devfs_vnodeops;
-static struct vop_vector devfs_specops;
 static struct fileops devfs_ops_f;
 
 #include <fs/devfs/devfs.h>
@@ -1737,7 +1736,7 @@ static struct vop_vector devfs_vnodeops 
 	.vop_vptocnp =		devfs_vptocnp,
 };
 
-static struct vop_vector devfs_specops = {
+struct vop_vector devfs_specops = {
 	.vop_default =		&default_vnodeops,
 
 	.vop_access =		devfs_access,

Modified: stable/10/sys/kern/vfs_subr.c
==============================================================================
--- stable/10/sys/kern/vfs_subr.c	Fri Mar  6 05:50:39 2015	(r279684)
+++ stable/10/sys/kern/vfs_subr.c	Fri Mar  6 09:22:05 2015	(r279685)
@@ -2624,6 +2624,7 @@ loop:
 		 */
 		if (vp->v_usecount == 0 || (flags & FORCECLOSE)) {
 			VNASSERT(vp->v_usecount == 0 ||
+			    vp->v_op != &devfs_specops ||
 			    (vp->v_type != VCHR && vp->v_type != VBLK), vp,
 			    ("device VNODE %p is FORCECLOSED", vp));
 			vgonel(vp);

Modified: stable/10/sys/sys/vnode.h
==============================================================================
--- stable/10/sys/sys/vnode.h	Fri Mar  6 05:50:39 2015	(r279684)
+++ stable/10/sys/sys/vnode.h	Fri Mar  6 09:22:05 2015	(r279685)
@@ -819,6 +819,7 @@ void vnode_destroy_vobject(struct vnode 
 extern struct vop_vector fifo_specops;
 extern struct vop_vector dead_vnodeops;
 extern struct vop_vector default_vnodeops;
+extern struct vop_vector devfs_specops;
 
 #define VOP_PANIC	((void*)(uintptr_t)vop_panic)
 #define VOP_NULL	((void*)(uintptr_t)vop_null)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201503060922.t269M6x3027800>