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
This commit is contained in:
parent
c3afd20f13
commit
dad22308a1
@ -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);
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user