git: a4032e2a694f - main - vfs: assorted tidy ups to lookup

From: Mateusz Guzik <mjg_at_FreeBSD.org>
Date: Sat, 26 Mar 2022 18:31:04 UTC
The branch main has been updated by mjg:

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

commit a4032e2a694fc621dbf7abf9a5f078bec6fa3409
Author:     Mateusz Guzik <mjg@FreeBSD.org>
AuthorDate: 2022-03-26 10:26:59 +0000
Commit:     Mateusz Guzik <mjg@FreeBSD.org>
CommitDate: 2022-03-26 17:06:09 +0000

    vfs: assorted tidy ups to lookup
    
    No functional changes.
---
 sys/kern/vfs_lookup.c | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c
index faef7b6cb254..34ecd91a064d 100644
--- a/sys/kern/vfs_lookup.c
+++ b/sys/kern/vfs_lookup.c
@@ -1059,7 +1059,7 @@ dirloop:
 	}
 	*nulchar = '\0';
 	cnp->cn_namelen = cp - cnp->cn_nameptr;
-	if (cnp->cn_namelen > NAME_MAX) {
+	if (__predict_false(cnp->cn_namelen > NAME_MAX)) {
 		error = ENAMETOOLONG;
 		goto bad;
 	}
@@ -1076,24 +1076,25 @@ dirloop:
 	prev_ni_next = ndp->ni_next;
 	ndp->ni_next = cp;
 
+	/*
+	 * Something else should be clearing this.
+	 */
+	cnp->cn_flags &= ~(ISDOTDOT|ISLASTCN);
+
 	cnp->cn_flags |= MAKEENTRY;
 	if (*cp == '\0' && docache == 0)
 		cnp->cn_flags &= ~MAKEENTRY;
 	if (cnp->cn_namelen == 2 &&
 	    cnp->cn_nameptr[1] == '.' && cnp->cn_nameptr[0] == '.')
 		cnp->cn_flags |= ISDOTDOT;
-	else
-		cnp->cn_flags &= ~ISDOTDOT;
-	if (*ndp->ni_next == 0)
+	if (*ndp->ni_next == 0) {
 		cnp->cn_flags |= ISLASTCN;
-	else
-		cnp->cn_flags &= ~ISLASTCN;
 
-	if ((cnp->cn_flags & ISLASTCN) != 0 &&
-	    cnp->cn_namelen == 1 && cnp->cn_nameptr[0] == '.' &&
-	    (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME)) {
-		error = EINVAL;
-		goto bad;
+		if (__predict_false(cnp->cn_namelen == 1 && cnp->cn_nameptr[0] == '.' &&
+		    (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME))) {
+			error = EINVAL;
+			goto bad;
+		}
 	}
 
 	nameicap_tracker_add(ndp, dp);
@@ -1186,7 +1187,7 @@ dirloop:
 unionlookup:
 #ifdef MAC
 	error = mac_vnode_check_lookup(cnp->cn_cred, dp, cnp);
-	if (error)
+	if (__predict_false(error))
 		goto bad;
 #endif
 	ndp->ni_dvp = dp;