diff options
author | dim <dim@FreeBSD.org> | 2015-01-28 18:45:40 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2015-01-28 18:45:40 +0000 |
commit | e375b19ff6a7fcefee296772f9b6a0da0b5194e6 (patch) | |
tree | 57e470dc5d8651ee46d8c943cfb008fbb3994717 /sys/fs/tmpfs/tmpfs_subr.c | |
parent | 4f1c85d9f021b19c5891376b841185e53285508d (diff) | |
parent | b4f4496909b7cb04bac577eb178e95f3595d4197 (diff) | |
download | FreeBSD-src-e375b19ff6a7fcefee296772f9b6a0da0b5194e6.zip FreeBSD-src-e375b19ff6a7fcefee296772f9b6a0da0b5194e6.tar.gz |
Merge ^/head r277804 through r277843.
Diffstat (limited to 'sys/fs/tmpfs/tmpfs_subr.c')
-rw-r--r-- | sys/fs/tmpfs/tmpfs_subr.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/fs/tmpfs/tmpfs_subr.c b/sys/fs/tmpfs/tmpfs_subr.c index d0d9a15..c1930f1 100644 --- a/sys/fs/tmpfs/tmpfs_subr.c +++ b/sys/fs/tmpfs/tmpfs_subr.c @@ -1415,6 +1415,31 @@ retry: return (0); } +void +tmpfs_check_mtime(struct vnode *vp) +{ + struct tmpfs_node *node; + struct vm_object *obj; + + ASSERT_VOP_ELOCKED(vp, "check_mtime"); + if (vp->v_type != VREG) + return; + node = VP_TO_TMPFS_NODE(vp); + obj = vp->v_object; + KASSERT((obj->flags & (OBJ_TMPFS_NODE | OBJ_TMPFS)) == + (OBJ_TMPFS_NODE | OBJ_TMPFS), ("non-tmpfs obj")); + /* unlocked read */ + if ((obj->flags & OBJ_TMPFS_DIRTY) != 0) { + VM_OBJECT_WLOCK(obj); + if ((obj->flags & OBJ_TMPFS_DIRTY) != 0) { + obj->flags &= ~OBJ_TMPFS_DIRTY; + node = VP_TO_TMPFS_NODE(vp); + node->tn_status |= TMPFS_NODE_MODIFIED; + } + VM_OBJECT_WUNLOCK(obj); + } +} + /* * Change flags of the given vnode. * Caller should execute tmpfs_update on vp after a successful execution. |