Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Jan 2021 07:36:11 GMT
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: deabdc686874 - main - cache: stop pre-checking seqc when starting the lookup
Message-ID:  <202101060736.1067aB81077326@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by mjg:

URL: https://cgit.FreeBSD.org/src/commit/?id=deabdc686874411bd32775c3bdd04c04d9eff3e5

commit deabdc686874411bd32775c3bdd04c04d9eff3e5
Author:     Mateusz Guzik <mjg@FreeBSD.org>
AuthorDate: 2021-01-06 06:12:58 +0000
Commit:     Mateusz Guzik <mjg@FreeBSD.org>
CommitDate: 2021-01-06 07:28:07 +0000

    cache: stop pre-checking seqc when starting the lookup
    
    Tested by:      pho
---
 sys/kern/vfs_cache.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c
index 710c499d6bb5..138a55f94dbd 100644
--- a/sys/kern/vfs_cache.c
+++ b/sys/kern/vfs_cache.c
@@ -5032,7 +5032,7 @@ cache_fplookup_skip_slashes(struct cache_fpl *fpl)
 	ndp->ni_next = cnp->cn_nameptr;
 
 	/*
-	 * Retry the lookup, similar to dot lookups.
+	 * See cache_fplookup_dot.
 	 */
 	fpl->tvp = fpl->dvp;
 	fpl->tvp_seqc = fpl->dvp_seqc;
@@ -5139,11 +5139,14 @@ cache_fplookup_impl(struct vnode *dvp, struct cache_fpl *fpl)
 
 	cache_fpl_checkpoint(fpl, &fpl->snd);
 
+	/*
+	 * The vnode is hand is almost always stable, skip checking for it.
+	 * Worst case this postpones the check towards the end of the iteration
+	 * of the main loop.
+	 */
 	fpl->dvp = dvp;
-	fpl->dvp_seqc = vn_seqc_read_any(fpl->dvp);
-	if (seqc_in_modify(fpl->dvp_seqc)) {
-		return (cache_fpl_aborted(fpl));
-	}
+	fpl->dvp_seqc = vn_seqc_read_notmodify(fpl->dvp);
+
 	mp = atomic_load_ptr(&dvp->v_mount);
 	if (__predict_false(mp == NULL || !cache_fplookup_mp_supported(mp))) {
 		return (cache_fpl_aborted(fpl));



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