git: e3bc87ab1b66 - main - vm_pageout: fix pageout_flush
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 31 May 2025 18:03:59 UTC
The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=e3bc87ab1b66e8fff1cd3a069e858461349a0cab commit e3bc87ab1b66e8fff1cd3a069e858461349a0cab Author: Doug Moore <dougm@FreeBSD.org> AuthorDate: 2025-05-31 18:02:08 +0000 Commit: Doug Moore <dougm@FreeBSD.org> CommitDate: 2025-05-31 18:02:08 +0000 vm_pageout: fix pageout_flush A change just made to vm_pageout_flush wrongly dismissed the variable 'runlen' and used 'count' in its place, with the unintended consequence of terminating the main loop of the function prematurely when the first VM_PAGER_AGAIN pageout status was encountered. Reintroduce that variable, so that the loop runs to completion. Reported by: alc Reviewed by: alc Fixes: f2a193a967e3 ("vm_pageout: reduce number of flush() params") Differential Revision: https://reviews.freebsd.org/D50622 --- sys/vm/vm_pageout.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c index 624184d57442..6d3139e58c5a 100644 --- a/sys/vm/vm_pageout.c +++ b/sys/vm/vm_pageout.c @@ -462,7 +462,7 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags, bool *eio) vm_object_t object = mc[0]->object; int pageout_status[count]; int numpagedout = 0; - int i; + int i, runlen; VM_OBJECT_ASSERT_WLOCKED(object); @@ -488,6 +488,7 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags, bool *eio) vm_pager_put_pages(object, mc, count, flags, pageout_status); + runlen = count; if (eio != NULL) *eio = false; for (i = 0; i < count; i++) { @@ -543,7 +544,8 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags, bool *eio) *eio = true; break; case VM_PAGER_AGAIN: - count = i; + if (runlen == count) + runlen = i; break; } @@ -559,7 +561,7 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags, bool *eio) } } if (eio != NULL) - return (count); + return (runlen); return (numpagedout); }