> On Oct 11, 2017, at 14:53, Matt Joras <mjo...@freebsd.org> wrote: > > Author: mjoras > Date: Wed Oct 11 21:53:50 2017 > New Revision: 324541 > URL: https://svnweb.freebsd.org/changeset/base/324541 > > Log: > Add clearing function for unr(9). > > Previously before you could call unrhdr_delete you needed to > individually free every allocated unit. It is useful to be able to tear > down the unr without having to go through this process, as it is > significantly faster than freeing the individual units. > > Reviewed by: cem, lidl > Approved by: rstone (mentor) > Sponsored by: Dell EMC Isilon > Differential Revision: https://reviews.freebsd.org/D12591 > > Modified: > head/share/man/man9/Makefile > head/share/man/man9/unr.9 > head/sys/kern/subr_unit.c > head/sys/sys/systm.h > > Modified: head/share/man/man9/Makefile > ============================================================================== > --- head/share/man/man9/Makefile Wed Oct 11 20:36:22 2017 > (r324540) > +++ head/share/man/man9/Makefile Wed Oct 11 21:53:50 2017 > (r324541) > @@ -414,6 +414,7 @@ MAN= accept_filter.9 \ > MLINKS= unr.9 alloc_unr.9 \ > unr.9 alloc_unrl.9 \ > unr.9 alloc_unr_specific.9 \ > + unr.9 clear_unrhdr.9 \ > unr.9 delete_unrhdr.9 \ > unr.9 free_unr.9 \ > unr.9 new_unrhdr.9 > > Modified: head/share/man/man9/unr.9 > ============================================================================== > --- head/share/man/man9/unr.9 Wed Oct 11 20:36:22 2017 (r324540) > +++ head/share/man/man9/unr.9 Wed Oct 11 21:53:50 2017 (r324541) > @@ -24,11 +24,12 @@ > .\" > .\" $FreeBSD$ > .\" > -.Dd July 5, 2010 > +.Dd October 4, 2017 > .Dt UNR 9 > .Os > .Sh NAME > .Nm new_unrhdr , > +.Nm clear_unrhdr , > .Nm delete_unrhdr , > .Nm alloc_unr , > .Nm alloc_unr_specific , > @@ -39,6 +40,8 @@ > .Ft "struct unrhdr *" > .Fn new_unrhdr "int low" "int high" "struct mtx *mutex" > .Ft void > +.Fn clear_unrhdr "struct unrhdr *uh" > +.Ft void > .Fn delete_unrhdr "struct unrhdr *uh" > .Ft int > .Fn alloc_unr "struct unrhdr *uh" > @@ -70,8 +73,16 @@ is not > .Dv NULL , > it is used for locking when allocating and freeing units. > Otherwise, internal mutex is used. > +.It Fn clear_unrhdr uh > +Clear all units from the specified unit number allocator entity. > +This function resets the entity as if it were just initialized with > +.Fn new_unrhdr . > .It Fn delete_unrhdr uh > -Destroy specified unit number allocator entity. > +Delete specified unit number allocator entity. > +This function frees the memory associated with the entity, it does not free > +any units. > +To free all units use > +.Fn clear_unrhdr . > .It Fn alloc_unr uh > Return a new unit number. > The lowest free number is always allocated. > > Modified: head/sys/kern/subr_unit.c > ============================================================================== > --- head/sys/kern/subr_unit.c Wed Oct 11 20:36:22 2017 (r324540) > +++ head/sys/kern/subr_unit.c Wed Oct 11 21:53:50 2017 (r324541) > @@ -366,6 +366,27 @@ delete_unrhdr(struct unrhdr *uh) > Free(uh); > } > > +void > +clear_unrhdr(struct unrhdr *uh) > +{ > + struct unr *up, *uq; > + > + KASSERT(TAILQ_EMPTY(&uh->ppfree), > + ("unrhdr has postponed item for free")); > + up = TAILQ_FIRST(&uh->head); > + while (up != NULL) {
Could this be done with TAILQ_FOREACH_SAFE? -Ngie
signature.asc
Description: Message signed with OpenPGP using GPGMail