]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
uma: Fix handling of reserves in zone_import()
authorMark Johnston <markj@FreeBSD.org>
Mon, 1 Nov 2021 13:27:52 +0000 (09:27 -0400)
committerMark Johnston <markj@FreeBSD.org>
Mon, 1 Nov 2021 13:51:43 +0000 (09:51 -0400)
commit7585c5db25b700d19baebd7afd7a1b2e03c29cda
treeb682360cd62f539c350ebe206c60d206d6d61f45
parentfab343a7168a2f033073bb5f65b5af17d9092c6f
uma: Fix handling of reserves in zone_import()

Kegs with no items reserved have uk_reserve = 0.  So the check
keg->uk_reserve >= dom->ud_free_items will be true once all slabs are
depleted.  Then, rather than go and allocate a fresh slab, we return to
the cache layer.

The intent was to do this only when the keg actually has a reserve, so
modify the check to verify this first.  Another approach would be to
make uk_reserve signed and set it to -1 until uma_zone_reserve() is
called, but this requires a few casts elsewhere.

Fixes: 1b2dcc8c54a8 ("uma: Avoid depleting keg reserves when filling a bucket")
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D32516
sys/vm/uma_core.c