From 8773f9e310419dfb13c5aa9fad0765dfea5ab83a Mon Sep 17 00:00:00 2001 From: mav Date: Wed, 27 Nov 2013 19:55:42 +0000 Subject: Fix bug introduced at r252226, when udata argument passed to bucket_alloc() was used without making sure first that it was really passed for us. On some of my systems this bug made user argument passed by ZFS code to uma_zalloc_arg() unexpectedly block UMA per-CPU caches for those zones. --- sys/vm/uma_core.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'sys/vm') diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index 62c2c52..dbb37c5 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -369,12 +369,13 @@ bucket_alloc(uma_zone_t zone, void *udata, int flags) * buckets via the allocation path or bucket allocations in the * free path. */ - if ((uintptr_t)udata & UMA_ZFLAG_BUCKET) - return (NULL); if ((zone->uz_flags & UMA_ZFLAG_BUCKET) == 0) udata = (void *)(uintptr_t)zone->uz_flags; - else + else { + if ((uintptr_t)udata & UMA_ZFLAG_BUCKET) + return (NULL); udata = (void *)((uintptr_t)udata | UMA_ZFLAG_BUCKET); + } if ((uintptr_t)udata & UMA_ZFLAG_CACHEONLY) flags |= M_NOVM; ubz = bucket_zone_lookup(zone->uz_count); -- cgit v1.1