Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Jan 2017 19:58:20 +0000 (UTC)
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r311531 - head/sys/fs/tmpfs
Message-ID:  <201701061958.v06JwKIe058473@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701061958.v06JwKIe058473>