From: Tomohiro Kusumi Date: Tue, 12 May 2015 00:57:44 +0000 (+0900) Subject: Reverting series of commits (1/2 and 2/2) since they introduce X-Git-Tag: v4.2.0rc~194 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/bed3b851dc267755eb3fe8079a0ac18986f2e8eb Reverting series of commits (1/2 and 2/2) since they introduce performance degrade. 'if ((node->tn_status & TMPFS_NODE_ACCESSED) == 0) {' can be done without inode lock and helps performance. Spotted-by: dillon Revert "sys/vfs/tmpfs: Make flag handling consistent [1/2]" This reverts commit e6db94b29aacbd288774574b1967828c8c07c013. --- diff --git a/sys/vfs/tmpfs/tmpfs_subr.c b/sys/vfs/tmpfs/tmpfs_subr.c index 59eadb189f..c13cdcca8a 100644 --- a/sys/vfs/tmpfs/tmpfs_subr.c +++ b/sys/vfs/tmpfs/tmpfs_subr.c @@ -1300,7 +1300,6 @@ tmpfs_itimes(struct vnode *vp, const struct timespec *acc, node->tn_ctime = now.tv_sec; node->tn_ctimensec = now.tv_nsec; } - /* This is the only place that clears the tn_status */ node->tn_status &= ~(TMPFS_NODE_ACCESSED | TMPFS_NODE_MODIFIED | TMPFS_NODE_CHANGED); TMPFS_NODE_UNLOCK(node); diff --git a/sys/vfs/tmpfs/tmpfs_vnops.c b/sys/vfs/tmpfs/tmpfs_vnops.c index 7e5a5b8e32..4a4328160b 100644 --- a/sys/vfs/tmpfs/tmpfs_vnops.c +++ b/sys/vfs/tmpfs/tmpfs_vnops.c @@ -110,9 +110,11 @@ tmpfs_nresolve(struct vop_nresolve_args *v) } TMPFS_NODE_UNLOCK(dnode); - TMPFS_NODE_LOCK(dnode); - dnode->tn_status |= TMPFS_NODE_ACCESSED; - TMPFS_NODE_UNLOCK(dnode); + if ((dnode->tn_status & TMPFS_NODE_ACCESSED) == 0) { + TMPFS_NODE_LOCK(dnode); + dnode->tn_status |= TMPFS_NODE_ACCESSED; + TMPFS_NODE_UNLOCK(dnode); + } /* * Store the result of this lookup in the cache. Avoid this if the @@ -529,9 +531,11 @@ tmpfs_read (struct vop_read_args *ap) } finished: - TMPFS_NODE_LOCK(node); - node->tn_status |= TMPFS_NODE_ACCESSED; - TMPFS_NODE_UNLOCK(node); + if ((node->tn_status & TMPFS_NODE_ACCESSED) == 0) { + TMPFS_NODE_LOCK(node); + node->tn_status |= TMPFS_NODE_ACCESSED; + TMPFS_NODE_UNLOCK(node); + } return (error); } @@ -1517,9 +1521,11 @@ outok: } TMPFS_NODE_UNLOCK(node); - TMPFS_NODE_LOCK(node); - node->tn_status |= TMPFS_NODE_ACCESSED; - TMPFS_NODE_UNLOCK(node); + if ((node->tn_status & TMPFS_NODE_ACCESSED) == 0) { + TMPFS_NODE_LOCK(node); + node->tn_status |= TMPFS_NODE_ACCESSED; + TMPFS_NODE_UNLOCK(node); + } return error; } @@ -1541,9 +1547,11 @@ tmpfs_readlink(struct vop_readlink_args *v) error = uiomove(node->tn_link, MIN(node->tn_size, uio->uio_resid), uio); TMPFS_NODE_UNLOCK(node); - TMPFS_NODE_LOCK(node); - node->tn_status |= TMPFS_NODE_ACCESSED; - TMPFS_NODE_UNLOCK(node); + if ((node->tn_status & TMPFS_NODE_ACCESSED) == 0) { + TMPFS_NODE_LOCK(node); + node->tn_status |= TMPFS_NODE_ACCESSED; + TMPFS_NODE_UNLOCK(node); + } return error; }