diff options
author | jeff <jeff@FreeBSD.org> | 2006-03-02 05:37:44 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2006-03-02 05:37:44 +0000 |
commit | 8e6862e21e88a44559d3bf6cfe1fe7f4452bff26 (patch) | |
tree | 0f16c6344a3f7c9e986f65a47ce37f8c524f5a1b /sys/geom/geom_vfs.c | |
parent | 02a394bf85e4043cf275721f79b72c24a8623ab2 (diff) | |
download | FreeBSD-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.c | 3 |
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; |