svn commit: r324541 - in head: share/man/man9 sys/kern sys/sys

Ngie Cooper (yaneurabeya) yaneurabeya at gmail.com
Sat Oct 14 05:12:18 UTC 2017


> On Oct 11, 2017, at 14:53, Matt Joras <mjoras at 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20171013/61a17d6e/attachment.sig>


More information about the svn-src-head mailing list