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