]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Only update the domain cursor once in keg_fetch_slab().
authorMark Johnston <markj@FreeBSD.org>
Tue, 18 Sep 2018 17:51:45 +0000 (17:51 +0000)
committerMark Johnston <markj@FreeBSD.org>
Tue, 18 Sep 2018 17:51:45 +0000 (17:51 +0000)
commit26fe2217bfbd6aa6ec67f5c57a2e7344bcf2fdff
tree091669dc29821f2709619bf4ee62b4f36c23ab75
parentdc39aae35ec4afaa6119b1645488ef3ac525bcf3
Only update the domain cursor once in keg_fetch_slab().

We drop the keg lock when we go to actually allocate the slab, allowing
other threads to advance the cursor.  This can cause us to exit the
round-robin loop before having attempted allocations from all domains,
resulting in a hang during a subsequent blocking allocation attempt from
a depleted domain.

Reported and tested by: Jan Bramkamp <crest@bultmann.eu>
Reviewed by: alc, cem
Approved by: re (gjb)
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D17209
sys/vm/uma_core.c