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>