> 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

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to