svn commit: r368236 - head/sys/kern

Mark Johnston markj at FreeBSD.org
Tue Dec 1 16:06:31 UTC 2020


Author: markj
Date: Tue Dec  1 16:06:31 2020
New Revision: 368236
URL: https://svnweb.freebsd.org/changeset/base/368236

Log:
  vmem: Revert r364744
  
  A pair of bugs are believed to have caused the hangs described in the
  commit log message for r364744:
  
  1. uma_reclaim() could trigger reclamation of the reserve of boundary
     tags used to avoid deadlock.  This was fixed by r366840.
  2. The loop in vmem_xalloc() would in some cases try to allocate more
     boundary tags than the expected upper bound of BT_MAXALLOC.  The
     reserve is sized based on the value BT_MAXMALLOC, so this behaviour
     could deplete the reserve without guaranteeing a successful
     allocation, resulting in a hang.  This was fixed by r366838.
  
  PR:		248008
  Tested by:	rmacklem

Modified:
  head/sys/kern/subr_vmem.c

Modified: head/sys/kern/subr_vmem.c
==============================================================================
--- head/sys/kern/subr_vmem.c	Tue Dec  1 16:02:52 2020	(r368235)
+++ head/sys/kern/subr_vmem.c	Tue Dec  1 16:06:31 2020	(r368236)
@@ -706,14 +706,10 @@ vmem_startup(void)
 	vmem_zone = uma_zcreate("vmem",
 	    sizeof(struct vmem), NULL, NULL, NULL, NULL,
 	    UMA_ALIGN_PTR, 0);
-#ifdef UMA_MD_SMALL_ALLOC
 	vmem_bt_zone = uma_zcreate("vmem btag",
 	    sizeof(struct vmem_btag), NULL, NULL, NULL, NULL,
 	    UMA_ALIGN_PTR, UMA_ZONE_VM);
-#else
-	vmem_bt_zone = uma_zcreate("vmem btag",
-	    sizeof(struct vmem_btag), NULL, NULL, NULL, NULL,
-	    UMA_ALIGN_PTR, UMA_ZONE_VM | UMA_ZONE_NOFREE);
+#ifndef UMA_MD_SMALL_ALLOC
 	mtx_init(&vmem_bt_lock, "btag lock", NULL, MTX_DEF);
 	uma_prealloc(vmem_bt_zone, BT_MAXALLOC);
 	/*


More information about the svn-src-head mailing list