Allocating new bucket for bucket zone, never take it from the zone itself,
since it will almost certanly fail. Take next bigger zone instead. This situation should not happen with original bucket zones configuration: "32 Bucket" zone uses "64 Bucket" and vice versa. But if "64 Bucket" zone lock is congested, zone may grow its bucket size and start biting itself. MFC after: 2 weeks Sponsored by: iXsystems, Inc.
This commit is contained in:
parent
896ae82d59
commit
20d3ab87cd
@ -381,6 +381,8 @@ bucket_alloc(uma_zone_t zone, void *udata, int flags)
|
||||
if ((uintptr_t)udata & UMA_ZFLAG_CACHEONLY)
|
||||
flags |= M_NOVM;
|
||||
ubz = bucket_zone_lookup(zone->uz_count);
|
||||
if (ubz->ubz_zone == zone && (ubz + 1)->ubz_entries != 0)
|
||||
ubz++;
|
||||
bucket = uma_zalloc_arg(ubz->ubz_zone, udata, flags);
|
||||
if (bucket) {
|
||||
#ifdef INVARIANTS
|
||||
|
Loading…
x
Reference in New Issue
Block a user