summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_vfs.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2006-03-02 05:37:44 +0000
committerjeff <jeff@FreeBSD.org>2006-03-02 05:37:44 +0000
commit8e6862e21e88a44559d3bf6cfe1fe7f4452bff26 (patch)
tree0f16c6344a3f7c9e986f65a47ce37f8c524f5a1b /sys/geom/geom_vfs.c
parent02a394bf85e4043cf275721f79b72c24a8623ab2 (diff)
downloadFreeBSD-src-8e6862e21e88a44559d3bf6cfe1fe7f4452bff26.zip
FreeBSD-src-8e6862e21e88a44559d3bf6cfe1fe7f4452bff26.tar.gz
- Lock Giant if needed around the call to vnode_create_vobject(). This is
only important if devfs is not mpsafe. Sponsored by: Isilon Systems, Inc. Found by: kris
Diffstat (limited to 'sys/geom/geom_vfs.c')
-rw-r--r--sys/geom/geom_vfs.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/geom/geom_vfs.c b/sys/geom/geom_vfs.c
index d8f6c1d..bff516b 100644
--- a/sys/geom/geom_vfs.c
+++ b/sys/geom/geom_vfs.c
@@ -131,6 +131,7 @@ g_vfs_open(struct vnode *vp, struct g_consumer **cpp, const char *fsname, int wr
struct g_provider *pp;
struct g_consumer *cp;
struct bufobj *bo;
+ int vfslocked;
int error;
g_topology_assert();
@@ -147,7 +148,9 @@ g_vfs_open(struct vnode *vp, struct g_consumer **cpp, const char *fsname, int wr
g_wither_geom(gp, ENXIO);
return (error);
}
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
vnode_create_vobject(vp, pp->mediasize, curthread);
+ VFS_UNLOCK_GIANT(vfslocked);
*cpp = cp;
bo = &vp->v_bufobj;
bo->bo_ops = g_vfs_bufops;
OpenPOWER on IntegriCloud