diff options
author | kib <kib@FreeBSD.org> | 2015-12-11 13:20:51 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2015-12-11 13:20:51 +0000 |
commit | 8fd2c598fd103bd31d2fed70e9fc760d8dc2691f (patch) | |
tree | 2302f1bd7987123a56311901301ea96e4cc3aae9 /sys/vm | |
parent | d7a35aff81f5674a6fc83517c52a82d61399c82c (diff) | |
download | FreeBSD-src-8fd2c598fd103bd31d2fed70e9fc760d8dc2691f.zip FreeBSD-src-8fd2c598fd103bd31d2fed70e9fc760d8dc2691f.tar.gz |
MFC r291408:
In vm_pageout_grow_cache(), do not re-try the inactive queue when
active queue scan initiated write, to avoid infinite loop.
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/vm_pageout.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 156d11a..4a5d2c7 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -728,32 +728,33 @@ vm_pageout_grow_cache(int tries, vm_paddr_t low, vm_paddr_t high) * the specified address range, as indicated by segments * constituting the domain. */ -again: +again_inact: if (inactl < inactmax) { if (vm_phys_domain_intersects(vm_dom[dom].vmd_segs, low, high) && vm_pageout_launder(&vm_dom[dom].vmd_pagequeues[PQ_INACTIVE], tries, low, high)) { inactl++; - goto again; + goto again_inact; } if (++dom == vm_ndomains) dom = 0; if (dom != initial_dom) - goto again; + goto again_inact; } +again_act: if (actl < actmax) { if (vm_phys_domain_intersects(vm_dom[dom].vmd_segs, low, high) && vm_pageout_launder(&vm_dom[dom].vmd_pagequeues[PQ_ACTIVE], tries, low, high)) { actl++; - goto again; + goto again_act; } if (++dom == vm_ndomains) dom = 0; if (dom != initial_dom) - goto again; + goto again_act; } } |