svn commit: r324666 - head/sys/kern

Matt Joras mjoras at FreeBSD.org
Mon Oct 16 16:14:52 UTC 2017


Author: mjoras
Date: Mon Oct 16 16:14:50 2017
New Revision: 324666
URL: https://svnweb.freebsd.org/changeset/base/324666

Log:
  Properly reset the fields in clean_unrhdr.
  
  In r324542 I neglected to reset the first and last fields of struct
  unrhdr. This causes a tmpfs to fail the unr(9) consistency checks with
  DIAGNOSTIC on. Fix this by resetting the fields by calling init_unrhdr.
  While here, change a loop to use TAILQ_FOREACH_SAFE since it is more
  readable and equally fast.
  
  Reported by:	David Wolfskill <david at catwhisker.org>
  Approved by:	rstone (mentor)
  Sponsored by:	Dell EMC Isilon

Modified:
  head/sys/kern/subr_unit.c

Modified: head/sys/kern/subr_unit.c
==============================================================================
--- head/sys/kern/subr_unit.c	Mon Oct 16 15:16:24 2017	(r324665)
+++ head/sys/kern/subr_unit.c	Mon Oct 16 16:14:50 2017	(r324666)
@@ -373,18 +373,17 @@ clear_unrhdr(struct unrhdr *uh)
 
 	KASSERT(TAILQ_EMPTY(&uh->ppfree),
 	    ("unrhdr has postponed item for free"));
-	up = TAILQ_FIRST(&uh->head);
-	while (up != NULL) {
-		uq = TAILQ_NEXT(up, list);
+	TAILQ_FOREACH_SAFE(up, &uh->head, list, uq) {
 		if (up->ptr != uh) {
 			Free(up->ptr);
 		}
 		Free(up);
-		up = uq;
 	}
-	TAILQ_INIT(&uh->head);
 	uh->busy = 0;
 	uh->alloc = 0;
+	init_unrhdr(uh, uh->low, uh->high, uh->mtx);
+
+	check_unrhdr(uh, __LINE__);
 }
 
 static __inline int


More information about the svn-src-head mailing list