git: deabdc686874 - main - cache: stop pre-checking seqc when starting the lookup
Mateusz Guzik
mjg at FreeBSD.org
Wed Jan 6 07:36:12 UTC 2021
The branch main has been updated by mjg:
URL: https://cgit.FreeBSD.org/src/commit/?id=deabdc686874411bd32775c3bdd04c04d9eff3e5
commit deabdc686874411bd32775c3bdd04c04d9eff3e5
Author: Mateusz Guzik <mjg at FreeBSD.org>
AuthorDate: 2021-01-06 06:12:58 +0000
Commit: Mateusz Guzik <mjg at 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));
More information about the dev-commits-src-all
mailing list