svn commit: r206756 - stable/8/sys/geom
Andriy Gapon
avg at FreeBSD.org
Sat Apr 17 11:57:42 UTC 2010
Author: avg
Date: Sat Apr 17 11:57:41 2010
New Revision: 206756
URL: http://svn.freebsd.org/changeset/base/206756
Log:
MFC r206130: g_vfs_open: allow only one mount per device vnode
Modified:
stable/8/sys/geom/geom_vfs.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/geom/geom_vfs.c
==============================================================================
--- stable/8/sys/geom/geom_vfs.c Sat Apr 17 11:40:39 2010 (r206755)
+++ stable/8/sys/geom/geom_vfs.c Sat Apr 17 11:57:41 2010 (r206756)
@@ -163,6 +163,10 @@ g_vfs_open(struct vnode *vp, struct g_co
g_topology_assert();
*cpp = NULL;
+ bo = &vp->v_bufobj;
+ if (bo->bo_private != vp)
+ return (EBUSY);
+
pp = g_dev_getprovider(vp->v_rdev);
if (pp == NULL)
return (ENOENT);
@@ -178,7 +182,7 @@ g_vfs_open(struct vnode *vp, struct g_co
vnode_create_vobject(vp, pp->mediasize, curthread);
VFS_UNLOCK_GIANT(vfslocked);
*cpp = cp;
- bo = &vp->v_bufobj;
+ cp->private = vp;
bo->bo_ops = g_vfs_bufops;
bo->bo_private = cp;
bo->bo_bsize = pp->sectorsize;
@@ -198,5 +202,6 @@ g_vfs_close(struct g_consumer *cp)
gp = cp->geom;
bo = gp->softc;
bufobj_invalbuf(bo, V_SAVE, 0, 0);
+ bo->bo_private = cp->private;
g_wither_geom_close(gp, ENXIO);
}
More information about the svn-src-stable
mailing list