Page MenuHomeFreeBSD

D29046.id85070.diff
No OneTemporary

D29046.id85070.diff

Index: sys/vm/uma_core.c
===================================================================
--- sys/vm/uma_core.c
+++ sys/vm/uma_core.c
@@ -3647,6 +3647,7 @@
keg_fetch_slab(uma_keg_t keg, uma_zone_t zone, int rdomain, const int flags)
{
struct vm_domainset_iter di;
+ struct domainset_ref dr, *drp;
uma_slab_t slab;
int aflags, domain;
bool rr;
@@ -3660,14 +3661,16 @@
* means that we cannot allow the vm_domainset layer to sleep. Thus,
* clear M_WAITOK and handle low memory conditions locally.
*/
+ aflags = (flags & ~M_WAITOK) | M_NOWAIT;
rr = rdomain == UMA_ANYDOMAIN;
if (rr) {
- aflags = (flags & ~M_WAITOK) | M_NOWAIT;
- vm_domainset_iter_policy_ref_init(&di, &keg->uk_dr, &domain,
- &aflags);
+ drp = &keg->uk_dr;
+ vm_domainset_iter_policy_ref_init(&di, drp, &domain, &aflags);
} else {
- aflags = flags;
- domain = rdomain;
+ dr.dr_policy = DOMAINSET_PREF(rdomain);
+ dr.dr_iter = rdomain;
+ drp = &dr;
+ vm_domainset_iter_policy_ref_init(&di, drp, &domain, &aflags);
}
for (;;) {
@@ -3686,9 +3689,9 @@
return (slab);
if (!rr && (flags & M_WAITOK) == 0)
break;
- if (rr && vm_domainset_iter_policy(&di, &domain) != 0) {
+ if (vm_domainset_iter_policy(&di, &domain) != 0) {
if ((flags & M_WAITOK) != 0) {
- vm_wait_doms(&keg->uk_dr.dr_policy->ds_mask, 0);
+ vm_wait_doms(drp->dr_policy->ds_mask, 0);
goto restart;
}
break;
@@ -3700,10 +3703,7 @@
* could have while we were unlocked. Check again before we
* fail.
*/
- if ((slab = keg_fetch_free_slab(keg, domain, rr, flags)) != NULL)
- return (slab);
-
- return (NULL);
+ return (keg_fetch_free_slab(keg, rr ? domain : rdomain, true, flags));
}
static void *

File Metadata

Mime Type
text/plain
Expires
Mon, Jan 19, 1:32 PM (17 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27745435
Default Alt Text
D29046.id85070.diff (1 KB)

Event Timeline