Page MenuHomeFreeBSD

D29046.id85068.diff
No OneTemporary

D29046.id85068.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;
uma_slab_t slab;
int aflags, domain;
bool rr;
@@ -3660,14 +3661,15 @@
* 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);
} else {
- aflags = flags;
- domain = rdomain;
+ dr.dr_policy = DOMAINSET_PREF(rdomain);
+ dr.dr_iter = rdomain;
+ vm_domainset_iter_policy_ref_init(&di, &dr, &domain, &aflags);
}
for (;;) {
@@ -3684,9 +3686,9 @@
slab = keg_alloc_slab(keg, zone, domain, flags, aflags);
if (slab != NULL)
return (slab);
- if (!rr && (flags & M_WAITOK) == 0)
+ if ((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);
goto restart;
@@ -3700,7 +3702,7 @@
* could have while we were unlocked. Check again before we
* fail.
*/
- if ((slab = keg_fetch_free_slab(keg, domain, rr, flags)) != NULL)
+ if ((slab = keg_fetch_free_slab(keg, rdomain, true, flags)) != NULL)
return (slab);
return (NULL);

File Metadata

Mime Type
text/plain
Expires
Thu, Jul 23, 10:44 PM (2 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35418394
Default Alt Text
D29046.id85068.diff (1 KB)

Event Timeline