svn commit: r258690 - head/sys/vm

Alexander Motin mav at FreeBSD.org
Wed Nov 27 19:55:43 UTC 2013


Author: mav
Date: Wed Nov 27 19:55:42 2013
New Revision: 258690
URL: http://svnweb.freebsd.org/changeset/base/258690

Log:
  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.

Modified:
  head/sys/vm/uma_core.c

Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c	Wed Nov 27 19:54:19 2013	(r258689)
+++ head/sys/vm/uma_core.c	Wed Nov 27 19:55:42 2013	(r258690)
@@ -369,12 +369,13 @@ bucket_alloc(uma_zone_t zone, void *udat
 	 * 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);


More information about the svn-src-head mailing list