The branch main has been updated by mjg:

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

commit deabdc686874411bd32775c3bdd04c04d9eff3e5
Author:     Mateusz Guzik <[email protected]>
AuthorDate: 2021-01-06 06:12:58 +0000
Commit:     Mateusz Guzik <[email protected]>
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));
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "[email protected]"

Reply via email to