94 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Index: sys/kern/vfs_lookup.c
 | 
						|
===================================================================
 | 
						|
--- sys/kern/vfs_lookup.c	(revision 273277)
 | 
						|
+++ sys/kern/vfs_lookup.c	(working copy)
 | 
						|
@@ -121,6 +121,16 @@
 | 
						|
  *		if symbolic link, massage name in buffer and continue
 | 
						|
  *	}
 | 
						|
  */
 | 
						|
+static void
 | 
						|
+namei_cleanup_cnp(struct componentname *cnp)
 | 
						|
+{
 | 
						|
+	uma_zfree(namei_zone, cnp->cn_pnbuf);
 | 
						|
+#ifdef DIAGNOSTIC
 | 
						|
+	cnp->cn_pnbuf = NULL;
 | 
						|
+	cnp->cn_nameptr = NULL;
 | 
						|
+#endif
 | 
						|
+}
 | 
						|
+
 | 
						|
 int
 | 
						|
 namei(struct nameidata *ndp)
 | 
						|
 {
 | 
						|
@@ -185,11 +195,7 @@
 | 
						|
 	}
 | 
						|
 #endif
 | 
						|
 	if (error) {
 | 
						|
-		uma_zfree(namei_zone, cnp->cn_pnbuf);
 | 
						|
-#ifdef DIAGNOSTIC
 | 
						|
-		cnp->cn_pnbuf = NULL;
 | 
						|
-		cnp->cn_nameptr = NULL;
 | 
						|
-#endif
 | 
						|
+		namei_cleanup_cnp(cnp);
 | 
						|
 		ndp->ni_vp = NULL;
 | 
						|
 		return (error);
 | 
						|
 	}
 | 
						|
@@ -256,11 +262,7 @@
 | 
						|
 			}
 | 
						|
 		}
 | 
						|
 		if (error) {
 | 
						|
-			uma_zfree(namei_zone, cnp->cn_pnbuf);
 | 
						|
-#ifdef DIAGNOSTIC
 | 
						|
-			cnp->cn_pnbuf = NULL;
 | 
						|
-			cnp->cn_nameptr = NULL;
 | 
						|
-#endif
 | 
						|
+			namei_cleanup_cnp(cnp);
 | 
						|
 			return (error);
 | 
						|
 		}
 | 
						|
 	}
 | 
						|
@@ -286,6 +288,7 @@
 | 
						|
 				if (KTRPOINT(curthread, KTR_CAPFAIL))
 | 
						|
 					ktrcapfail(CAPFAIL_LOOKUP, NULL, NULL);
 | 
						|
 #endif
 | 
						|
+				namei_cleanup_cnp(cnp);
 | 
						|
 				return (ENOTCAPABLE);
 | 
						|
 			}
 | 
						|
 			while (*(cnp->cn_nameptr) == '/') {
 | 
						|
@@ -298,11 +301,7 @@
 | 
						|
 		ndp->ni_startdir = dp;
 | 
						|
 		error = lookup(ndp);
 | 
						|
 		if (error) {
 | 
						|
-			uma_zfree(namei_zone, cnp->cn_pnbuf);
 | 
						|
-#ifdef DIAGNOSTIC
 | 
						|
-			cnp->cn_pnbuf = NULL;
 | 
						|
-			cnp->cn_nameptr = NULL;
 | 
						|
-#endif
 | 
						|
+			namei_cleanup_cnp(cnp);
 | 
						|
 			SDT_PROBE(vfs, namei, lookup, return, error, NULL, 0,
 | 
						|
 			    0, 0);
 | 
						|
 			return (error);
 | 
						|
@@ -312,11 +311,7 @@
 | 
						|
 		 */
 | 
						|
 		if ((cnp->cn_flags & ISSYMLINK) == 0) {
 | 
						|
 			if ((cnp->cn_flags & (SAVENAME | SAVESTART)) == 0) {
 | 
						|
-				uma_zfree(namei_zone, cnp->cn_pnbuf);
 | 
						|
-#ifdef DIAGNOSTIC
 | 
						|
-				cnp->cn_pnbuf = NULL;
 | 
						|
-				cnp->cn_nameptr = NULL;
 | 
						|
-#endif
 | 
						|
+				namei_cleanup_cnp(cnp);
 | 
						|
 			} else
 | 
						|
 				cnp->cn_flags |= HASBUF;
 | 
						|
 
 | 
						|
@@ -378,11 +373,7 @@
 | 
						|
 		vput(ndp->ni_vp);
 | 
						|
 		dp = ndp->ni_dvp;
 | 
						|
 	}
 | 
						|
-	uma_zfree(namei_zone, cnp->cn_pnbuf);
 | 
						|
-#ifdef DIAGNOSTIC
 | 
						|
-	cnp->cn_pnbuf = NULL;
 | 
						|
-	cnp->cn_nameptr = NULL;
 | 
						|
-#endif
 | 
						|
+	namei_cleanup_cnp(cnp);
 | 
						|
 	vput(ndp->ni_vp);
 | 
						|
 	ndp->ni_vp = NULL;
 | 
						|
 	vrele(ndp->ni_dvp);
 |