The branch main has been updated by mjg:

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

commit 1365b5f86f631ab6b30fd5f71685e39aa8887474
Author:     Mateusz Guzik <m...@freebsd.org>
AuthorDate: 2020-12-28 11:24:48 +0000
Commit:     Mateusz Guzik <m...@freebsd.org>
CommitDate: 2021-01-01 00:10:43 +0000

    cache: fold NCF_WHITE check into the rest
    
    Tested by:      pho
---
 sys/kern/vfs_cache.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c
index 40cd174e1022..4b8940b7511c 100644
--- a/sys/kern/vfs_cache.c
+++ b/sys/kern/vfs_cache.c
@@ -263,6 +263,18 @@ cache_ncp_invalidate(struct namecache *ncp)
        __predict_true((_nc_flag & (NCF_INVALID | NCF_WIP)) == 0);      \
 })
 
+/*
+ * Like the above but also checks NCF_WHITE.
+ */
+#define cache_fpl_neg_ncp_canuse(ncp)  ({                              \
+       struct namecache *_ncp = (ncp);                                 \
+       u_char _nc_flag;                                                \
+                                                                       \
+       atomic_thread_fence_acq();                                      \
+       _nc_flag = atomic_load_char(&_ncp->nc_flag);                    \
+       __predict_true((_nc_flag & (NCF_INVALID | NCF_WIP | NCF_WHITE)) == 0);  
\
+})
+
 /*
  * Name caching works as follows:
  *
@@ -4505,11 +4517,7 @@ cache_fplookup_neg(struct cache_fpl *fpl, struct 
namecache *ncp, uint32_t hash)
                return (cache_fplookup_modifying(fpl));
        }
        neg_promote = cache_neg_hit_prep(ncp);
-       if (!cache_ncp_canuse(ncp)) {
-               cache_neg_hit_abort(ncp);
-               return (cache_fpl_partial(fpl));
-       }
-       if (__predict_false((nc_flag & NCF_WHITE) != 0)) {
+       if (!cache_fpl_neg_ncp_canuse(ncp)) {
                cache_neg_hit_abort(ncp);
                return (cache_fpl_partial(fpl));
        }
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to