Skip to content

Commit 2ecfb14

Browse files
committed
tmpfs: recalculate OBJ_TMPFS_VREF on reinstantiating node' vnode
(cherry picked from commit 58d7ac1)
1 parent 936aa8e commit 2ecfb14

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

sys/fs/tmpfs/tmpfs_subr.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1053,15 +1053,19 @@ tmpfs_alloc_vp(struct mount *mp, struct tmpfs_node *node, int lkflag,
10531053
KASSERT((object->flags & OBJ_TMPFS_VREF) == 0,
10541054
("%s: object %p with OBJ_TMPFS_VREF but without vnode",
10551055
__func__, object));
1056-
KASSERT(object->un_pager.swp.writemappings == 0,
1057-
("%s: object %p has writemappings",
1058-
__func__, object));
10591056
VI_LOCK(vp);
10601057
KASSERT(vp->v_object == NULL, ("Not NULL v_object in tmpfs"));
10611058
vp->v_object = object;
10621059
vn_irflag_set_locked(vp, (tm->tm_pgread ? VIRF_PGREAD : 0) |
10631060
VIRF_TEXT_REF);
10641061
VI_UNLOCK(vp);
1062+
VNASSERT((object->flags & OBJ_TMPFS_VREF) == 0, vp,
1063+
("leaked OBJ_TMPFS_VREF"));
1064+
if (object->un_pager.swp.writemappings > 0) {
1065+
vrefact(vp);
1066+
vlazy(vp);
1067+
vm_object_set_flag(object, OBJ_TMPFS_VREF);
1068+
}
10651069
VM_OBJECT_WUNLOCK(object);
10661070
break;
10671071
case VDIR:

0 commit comments

Comments
 (0)