1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-17 10:26:15 +00:00

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.

Sponsored by:  EMC / Isilon Storage Division
Submitted by:   Conrad Meyer
MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2015-02-27 16:43:50 +00:00
parent b96bd95b85
commit 08189ed667
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=279362
3 changed files with 3 additions and 2 deletions

View File

@ -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>
@ -1760,7 +1759,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,

View File

@ -2645,6 +2645,7 @@ vflush(struct mount *mp, int rootrefs, int flags, struct thread *td)
*/
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);

View File

@ -822,6 +822,7 @@ void vnode_destroy_vobject(struct vnode *vp);
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)