aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2019-09-22 20:49:17 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2019-09-22 20:49:17 +0000
commitcd2112c305f5aff1f30b6d6281fd75946592e8f5 (patch)
tree8946788c6ba03e1482313c627883877ce307d249 /sys
parentd2be3ef05c1fbcd66e9554f513e9f6816f56de6e (diff)
downloadsrc-cd2112c305f5aff1f30b6d6281fd75946592e8f5.tar.gz
src-cd2112c305f5aff1f30b6d6281fd75946592e8f5.zip
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/vfs_cache.c55
1 files changed, 27 insertions, 28 deletions
diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c
index ef0654800391..7b43d4e24d7b 100644
--- a/sys/kern/vfs_cache.c
+++ b/sys/kern/vfs_cache.c
@@ -1380,7 +1380,7 @@ retry:
}
/* We failed to find an entry */
- if (ncp == NULL) {
+ if (__predict_false(ncp == NULL)) {
rw_runlock(blp);
SDT_PROBE3(vfs, namecache, lookup, miss, dvp, cnp->cn_nameptr,
NULL);
@@ -1388,35 +1388,17 @@ retry:
return (0);
}
- /* We found a "positive" match, return the vnode */
- if (!(ncp->nc_flag & NCF_NEGATIVE)) {
- counter_u64_add(numposhits, 1);
- *vpp = ncp->nc_vp;
- CTR4(KTR_VFS, "cache_lookup(%p, %s) found %p via ncp %p",
- dvp, cnp->cn_nameptr, *vpp, ncp);
- SDT_PROBE3(vfs, namecache, lookup, hit, dvp, ncp->nc_name,
- *vpp);
- cache_out_ts(ncp, tsp, ticksp);
- goto success;
- }
+ if (ncp->nc_flag & NCF_NEGATIVE)
+ goto negative_success;
-negative_success:
- /* We found a negative match, and want to create it, so purge */
- if (cnp->cn_nameiop == CREATE) {
- counter_u64_add(numnegzaps, 1);
- goto zap_and_exit;
- }
-
- counter_u64_add(numneghits, 1);
- cache_negative_hit(ncp);
- if (ncp->nc_flag & NCF_WHITE)
- cnp->cn_flags |= ISWHITEOUT;
- SDT_PROBE2(vfs, namecache, lookup, hit__negative, dvp,
- ncp->nc_name);
+ /* We found a "positive" match, return the vnode */
+ counter_u64_add(numposhits, 1);
+ *vpp = ncp->nc_vp;
+ CTR4(KTR_VFS, "cache_lookup(%p, %s) found %p via ncp %p",
+ dvp, cnp->cn_nameptr, *vpp, ncp);
+ SDT_PROBE3(vfs, namecache, lookup, hit, dvp, ncp->nc_name,
+ *vpp);
cache_out_ts(ncp, tsp, ticksp);
- cache_lookup_unlock(blp, dvlp);
- return (ENOENT);
-
success:
/*
* On success we return a locked and ref'd vnode as per the lookup
@@ -1450,6 +1432,23 @@ success:
}
return (-1);
+negative_success:
+ /* We found a negative match, and want to create it, so purge */
+ if (cnp->cn_nameiop == CREATE) {
+ counter_u64_add(numnegzaps, 1);
+ goto zap_and_exit;
+ }
+
+ counter_u64_add(numneghits, 1);
+ cache_negative_hit(ncp);
+ if (ncp->nc_flag & NCF_WHITE)
+ cnp->cn_flags |= ISWHITEOUT;
+ SDT_PROBE2(vfs, namecache, lookup, hit__negative, dvp,
+ ncp->nc_name);
+ cache_out_ts(ncp, tsp, ticksp);
+ cache_lookup_unlock(blp, dvlp);
+ return (ENOENT);
+
zap_and_exit:
if (blp != NULL)
error = cache_zap_rlocked_bucket(ncp, cnp, hash, blp);