summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/vm/uma_core.c13
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);
OpenPOWER on IntegriCloud