summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_pageout.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2015-12-11 13:20:51 +0000
committerkib <kib@FreeBSD.org>2015-12-11 13:20:51 +0000
commit8fd2c598fd103bd31d2fed70e9fc760d8dc2691f (patch)
tree2302f1bd7987123a56311901301ea96e4cc3aae9 /sys/vm/vm_pageout.c
parentd7a35aff81f5674a6fc83517c52a82d61399c82c (diff)
downloadFreeBSD-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/vm_pageout.c')
-rw-r--r--sys/vm/vm_pageout.c11
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;
}
}
OpenPOWER on IntegriCloud