svn commit: r338755 - head/sys/vm

Mark Johnston markj at FreeBSD.org
Tue Sep 18 17:51:46 UTC 2018


Author: markj
Date: Tue Sep 18 17:51:45 2018
New Revision: 338755
URL: https://svnweb.freebsd.org/changeset/base/338755

Log:
  Only update the domain cursor once in keg_fetch_slab().
  
  We drop the keg lock when we go to actually allocate the slab, allowing
  other threads to advance the cursor.  This can cause us to exit the
  round-robin loop before having attempted allocations from all domains,
  resulting in a hang during a subsequent blocking allocation attempt from
  a depleted domain.
  
  Reported and tested by:	Jan Bramkamp <crest at bultmann.eu>
  Reviewed by:	alc, cem
  Approved by:	re (gjb)
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D17209

Modified:
  head/sys/vm/uma_core.c

Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c	Tue Sep 18 16:57:04 2018	(r338754)
+++ head/sys/vm/uma_core.c	Tue Sep 18 17:51:45 2018	(r338755)
@@ -2698,10 +2698,8 @@ again:
 			LIST_INSERT_HEAD(&dom->ud_part_slab, slab, us_link);
 			return (slab);
 		}
-		if (rr) {
-			keg->uk_cursor = (keg->uk_cursor + 1) % vm_ndomains;
-			domain = keg->uk_cursor;
-		}
+		if (rr)
+			domain = (domain + 1) % vm_ndomains;
 	} while (domain != start);
 
 	/* Retry domain scan with blocking. */


More information about the svn-src-head mailing list