diff options
-rw-r--r-- | sys/vm/uma_core.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index 09f3d67..08811a7 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -703,10 +703,15 @@ slab_zalloc(uma_zone_t zone, int wait) wait &= ~M_ZERO; if (booted || (zone->uz_flags & UMA_ZFLAG_PRIVALLOC)) { - mtx_lock(&Giant); - mem = zone->uz_allocf(zone, - zone->uz_ppera * UMA_SLAB_SIZE, &flags, wait); - mtx_unlock(&Giant); + if ((wait & M_NOWAIT) == 0) { + mtx_lock(&Giant); + mem = zone->uz_allocf(zone, + zone->uz_ppera * UMA_SLAB_SIZE, &flags, wait); + mtx_unlock(&Giant); + } else { + mem = zone->uz_allocf(zone, + zone->uz_ppera * UMA_SLAB_SIZE, &flags, wait); + } if (mem == NULL) { ZONE_LOCK(zone); return (NULL); |