Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/tmpfs/tmpfs_subr.c
Show First 20 Lines • Show All 1,471 Lines • ▼ Show 20 Lines | tmpfs_check_mtime(struct vnode *vp) | ||||
ASSERT_VOP_ELOCKED(vp, "check_mtime"); | ASSERT_VOP_ELOCKED(vp, "check_mtime"); | ||||
if (vp->v_type != VREG) | if (vp->v_type != VREG) | ||||
return; | return; | ||||
obj = vp->v_object; | obj = vp->v_object; | ||||
KASSERT((obj->flags & (OBJ_TMPFS_NODE | OBJ_TMPFS)) == | KASSERT((obj->flags & (OBJ_TMPFS_NODE | OBJ_TMPFS)) == | ||||
(OBJ_TMPFS_NODE | OBJ_TMPFS), ("non-tmpfs obj")); | (OBJ_TMPFS_NODE | OBJ_TMPFS), ("non-tmpfs obj")); | ||||
/* unlocked read */ | /* unlocked read */ | ||||
if ((obj->flags & OBJ_TMPFS_DIRTY) != 0) { | if (obj->generation != obj->cleangeneration) { | ||||
VM_OBJECT_WLOCK(obj); | VM_OBJECT_WLOCK(obj); | ||||
if ((obj->flags & OBJ_TMPFS_DIRTY) != 0) { | if (obj->generation != obj->cleangeneration) { | ||||
obj->flags &= ~OBJ_TMPFS_DIRTY; | obj->cleangeneration = obj->generation; | ||||
node = VP_TO_TMPFS_NODE(vp); | node = VP_TO_TMPFS_NODE(vp); | ||||
node->tn_status |= TMPFS_NODE_MODIFIED | | node->tn_status |= TMPFS_NODE_MODIFIED | | ||||
TMPFS_NODE_CHANGED; | TMPFS_NODE_CHANGED; | ||||
} | } | ||||
VM_OBJECT_WUNLOCK(obj); | VM_OBJECT_WUNLOCK(obj); | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 382 Lines • Show Last 20 Lines |