svn commit: r267387 - head/sys/vm

Alexander Motin mav at FreeBSD.org
Thu Jun 12 11:36:22 UTC 2014


Author: mav
Date: Thu Jun 12 11:36:22 2014
New Revision: 267387
URL: http://svnweb.freebsd.org/changeset/base/267387

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

Modified:
  head/sys/vm/uma_core.c

Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c	Thu Jun 12 11:21:18 2014	(r267386)
+++ head/sys/vm/uma_core.c	Thu Jun 12 11:36:22 2014	(r267387)
@@ -381,6 +381,8 @@ bucket_alloc(uma_zone_t zone, void *udat
 	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


More information about the svn-src-all mailing list