Author: mjg
Date: Fri Jan  6 19:58:20 2017
New Revision: 311531
URL: https://svnweb.freebsd.org/changeset/base/311531

Log:
  tmpfs: perform a lockless check in tmpfs_itimes
  
  Most of the time the status is 0 as the function is repeatedly
  called from tmpfs_getattr.

Modified:
  head/sys/fs/tmpfs/tmpfs_subr.c

Modified: head/sys/fs/tmpfs/tmpfs_subr.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_subr.c      Fri Jan  6 18:41:28 2017        
(r311530)
+++ head/sys/fs/tmpfs/tmpfs_subr.c      Fri Jan  6 19:58:20 2017        
(r311531)
@@ -1747,19 +1747,22 @@ tmpfs_set_status(struct tmpfs_node *node
 }
 
 /* Sync timestamps */
-static void
-tmpfs_itimes_locked(struct tmpfs_node *node, const struct timespec *acc,
+void
+tmpfs_itimes(struct vnode *vp, const struct timespec *acc,
     const struct timespec *mod)
 {
+       struct tmpfs_node *node;
        struct timespec now;
 
-       TMPFS_ASSERT_LOCKED(node);
+       ASSERT_VOP_LOCKED(vp, "tmpfs_itimes");
+       node = VP_TO_TMPFS_NODE(vp);
 
        if ((node->tn_status & (TMPFS_NODE_ACCESSED | TMPFS_NODE_MODIFIED |
            TMPFS_NODE_CHANGED)) == 0)
                return;
 
        vfs_timestamp(&now);
+       TMPFS_NODE_LOCK(node);
        if (node->tn_status & TMPFS_NODE_ACCESSED) {
                if (acc == NULL)
                         acc = &now;
@@ -1774,19 +1777,6 @@ tmpfs_itimes_locked(struct tmpfs_node *n
                node->tn_ctime = now;
        node->tn_status &= ~(TMPFS_NODE_ACCESSED | TMPFS_NODE_MODIFIED |
            TMPFS_NODE_CHANGED);
-}
-
-void
-tmpfs_itimes(struct vnode *vp, const struct timespec *acc,
-    const struct timespec *mod)
-{
-       struct tmpfs_node *node;
-
-       ASSERT_VOP_LOCKED(vp, "tmpfs_itimes");
-       node = VP_TO_TMPFS_NODE(vp);
-
-       TMPFS_NODE_LOCK(node);
-       tmpfs_itimes_locked(node, acc, mod);
        TMPFS_NODE_UNLOCK(node);
 
        /* XXX: FIX? The entropy here is desirable, but the harvesting may be 
expensive */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to