diff options
author | kib <kib@FreeBSD.org> | 2014-07-14 08:55:02 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2014-07-14 08:55:02 +0000 |
commit | 7dd9ab980a47b3ba8e37c7e7458baa629759e34b (patch) | |
tree | f4118f95112031759cad24c4390fcef5fbf46b74 /sys | |
parent | 8542c8b735cda87e94daa65cef2491ac0e1bfb92 (diff) | |
download | FreeBSD-src-7dd9ab980a47b3ba8e37c7e7458baa629759e34b.zip FreeBSD-src-7dd9ab980a47b3ba8e37c7e7458baa629759e34b.tar.gz |
Add some assertions for the code handling vm_object for tmpfs vnode.
In particular, vnode must be exclusively locked when the tmpfs vnode
and object are divorced. When the vnode is opened, the object must be
still alive, since only live vnode can be opened, and the tmpfs node
owns a reference on the object.
Tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 2 weeks
Diffstat (limited to 'sys')
-rw-r--r-- | sys/fs/tmpfs/tmpfs_subr.c | 1 | ||||
-rw-r--r-- | sys/fs/tmpfs/tmpfs_vnops.c | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/sys/fs/tmpfs/tmpfs_subr.c b/sys/fs/tmpfs/tmpfs_subr.c index 66ef3e3..4c179ab 100644 --- a/sys/fs/tmpfs/tmpfs_subr.c +++ b/sys/fs/tmpfs/tmpfs_subr.c @@ -428,6 +428,7 @@ void tmpfs_destroy_vobject(struct vnode *vp, vm_object_t obj) { + ASSERT_VOP_ELOCKED(vp, "tmpfs_destroy_vobject"); if (vp->v_type != VREG || obj == NULL) return; diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c index 3586a28..8296ad10 100644 --- a/sys/fs/tmpfs/tmpfs_vnops.c +++ b/sys/fs/tmpfs/tmpfs_vnops.c @@ -258,6 +258,8 @@ tmpfs_open(struct vop_open_args *v) else { error = 0; /* For regular files, the call below is nop. */ + KASSERT(vp->v_type != VREG || (node->tn_reg.tn_aobj->flags & + OBJ_DEAD) == 0, ("dead object")); vnode_create_vobject(vp, node->tn_size, v->a_td); } |