The branch stable/14 has been updated by markj:

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

commit b080a04e25113112e0d94a20c8d1c1241a3387e9
Author:     Mark Johnston <[email protected]>
AuthorDate: 2025-05-02 21:34:16 +0000
Commit:     Mark Johnston <[email protected]>
CommitDate: 2025-06-01 19:53:28 +0000

    vfs cache: Add a predicate for testing cache entries
    
    No functional change intended.
    
    Reviewed by:    olce, kib
    MFC after:      2 weeks
    Sponsored by:   Klara, Inc.
    Differential Revision:  https://reviews.freebsd.org/D50105
    
    (cherry picked from commit 029ed5f574f61443fd12e0e70c7ab4dc296b81e5)
---
 sys/kern/vfs_cache.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c
index 300173347401..9b2b246d234f 100644
--- a/sys/kern/vfs_cache.c
+++ b/sys/kern/vfs_cache.c
@@ -34,7 +34,6 @@
  *     @(#)vfs_cache.c 8.5 (Berkeley) 3/22/95
  */
 
-#include <sys/cdefs.h>
 #include "opt_ddb.h"
 #include "opt_ktrace.h"
 
@@ -372,6 +371,18 @@ cache_ncp_invalidate(struct namecache *ncp)
        atomic_thread_fence_rel();
 }
 
+/*
+ * Does this entry match the given directory and name?
+ */
+static bool
+cache_ncp_match(struct namecache *ncp, struct vnode *dvp,
+    struct componentname *cnp)
+{
+       return (ncp->nc_dvp == dvp &&
+           ncp->nc_nlen == cnp->cn_namelen &&
+           bcmp(ncp->nc_name, cnp->cn_nameptr, cnp->cn_namelen) == 0);
+}
+
 /*
  * Check whether the entry can be safely used.
  *
@@ -1325,8 +1336,7 @@ cache_neg_promote_cond(struct vnode *dvp, struct 
componentname *cnp,
        /*
         * The newly found entry may be something different...
         */
-       if (!(ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen &&
-           !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen))) {
+       if (!cache_ncp_match(ncp, dvp, cnp)) {
                goto out_abort;
        }
 
@@ -1672,12 +1682,9 @@ cache_zap_unlocked_bucket(struct namecache *ncp, struct 
componentname *cnp,
        cache_lock_vnodes(dvlp, vlp);
        mtx_lock(blp);
        CK_SLIST_FOREACH(rncp, (NCHHASH(hash)), nc_hash) {
-               if (rncp == ncp && rncp->nc_dvp == dvp &&
-                   rncp->nc_nlen == cnp->cn_namelen &&
-                   !bcmp(rncp->nc_name, cnp->cn_nameptr, rncp->nc_nlen))
+               if (rncp == ncp && cache_ncp_match(rncp, dvp, cnp))
                        break;
        }
-
        if (rncp == NULL)
                goto out_mismatch;
 
@@ -1784,8 +1791,7 @@ retry:
        mtx_lock(blp);
 
        CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) {
-               if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen &&
-                   !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen))
+               if (cache_ncp_match(ncp, dvp, cnp))
                        break;
        }
 
@@ -1985,8 +1991,7 @@ retry:
        mtx_lock(blp);
 
        CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) {
-               if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen &&
-                   !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen))
+               if (cache_ncp_match(ncp, dvp, cnp))
                        break;
        }
 
@@ -2080,8 +2085,7 @@ cache_lookup(struct vnode *dvp, struct vnode **vpp, 
struct componentname *cnp,
        vfs_smr_enter();
 
        CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) {
-               if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen &&
-                   !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen))
+               if (cache_ncp_match(ncp, dvp, cnp))
                        break;
        }
 
@@ -2481,9 +2485,7 @@ cache_enter_time(struct vnode *dvp, struct vnode *vp, 
struct componentname *cnp,
         */
        ncpp = NCHHASH(hash);
        CK_SLIST_FOREACH(n2, ncpp, nc_hash) {
-               if (n2->nc_dvp == dvp &&
-                   n2->nc_nlen == cnp->cn_namelen &&
-                   !bcmp(n2->nc_name, cnp->cn_nameptr, n2->nc_nlen)) {
+               if (cache_ncp_match(n2, dvp, cnp)) {
                        MPASS(cache_ncp_canuse(n2));
                        if ((n2->nc_flag & NCF_NEGATIVE) != 0)
                                KASSERT(vp == NULL,
@@ -3016,8 +3018,7 @@ cache_validate(struct vnode *dvp, struct vnode *vp, 
struct componentname *cnp)
        blp = HASH2BUCKETLOCK(hash);
        mtx_lock(blp);
        CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) {
-               if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen &&
-                   !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen)) {
+               if (cache_ncp_match(ncp, dvp, cnp)) {
                        if (ncp->nc_vp != vp)
                                panic("%s: mismatch (%p != %p); ncp %p [%s] dvp 
%p\n",
                                    __func__, vp, ncp->nc_vp, ncp, 
ncp->nc_name, ncp->nc_dvp);
@@ -5462,8 +5463,7 @@ cache_fplookup_next(struct cache_fpl *fpl)
        MPASS(!cache_fpl_isdotdot(cnp));
 
        CK_SLIST_FOREACH(ncp, (NCHHASH(hash)), nc_hash) {
-               if (ncp->nc_dvp == dvp && ncp->nc_nlen == cnp->cn_namelen &&
-                   !bcmp(ncp->nc_name, cnp->cn_nameptr, ncp->nc_nlen))
+               if (cache_ncp_match(ncp, dvp, cnp))
                        break;
        }
 

Reply via email to