summaryrefslogtreecommitdiffstats
path: root/sys/fs/tmpfs/tmpfs_subr.c
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2015-01-28 18:45:40 +0000
committerdim <dim@FreeBSD.org>2015-01-28 18:45:40 +0000
commite375b19ff6a7fcefee296772f9b6a0da0b5194e6 (patch)
tree57e470dc5d8651ee46d8c943cfb008fbb3994717 /sys/fs/tmpfs/tmpfs_subr.c
parent4f1c85d9f021b19c5891376b841185e53285508d (diff)
parentb4f4496909b7cb04bac577eb178e95f3595d4197 (diff)
downloadFreeBSD-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.c25
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.
OpenPOWER on IntegriCloud