summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_object.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2010-11-21 10:18:28 +0000
committerkib <kib@FreeBSD.org>2010-11-21 10:18:28 +0000
commite6b1bc24ddbcae9b307ca7c6b42147b8e40d7dcb (patch)
tree2a66f4ba14bb50842c9491e9f0b56c37d124903f /sys/vm/vm_object.c
parentdac2186be3d97d67c08deafc8cd99fa98e1fafae (diff)
downloadFreeBSD-src-e6b1bc24ddbcae9b307ca7c6b42147b8e40d7dcb.zip
FreeBSD-src-e6b1bc24ddbcae9b307ca7c6b42147b8e40d7dcb.tar.gz
Eliminate the mab, maf arrays and related variables.
The change also fixes off-by-one error in the calculation of mreq. Suggested and reviewed by: alc Tested by: pho MFC after: 5 days
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r--sys/vm/vm_object.c47
1 files changed, 15 insertions, 32 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index b7f47b5..ecbef05 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -853,57 +853,40 @@ rescan:
static int
vm_object_page_collect_flush(vm_object_t object, vm_page_t p, int pagerflags)
{
- int runlen;
- int maxf;
- int chkb;
- int maxb;
- int i, index;
- vm_pindex_t pi;
- vm_page_t maf[vm_pageout_page_count];
- vm_page_t mab[vm_pageout_page_count];
- vm_page_t ma[vm_pageout_page_count];
- vm_page_t tp, p1;
+ vm_page_t ma[vm_pageout_page_count], p_first, tp;
+ int count, i, mreq, runlen;
mtx_assert(&vm_page_queue_mtx, MA_NOTOWNED);
vm_page_lock_assert(p, MA_NOTOWNED);
VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
- pi = p->pindex;
- maxf = 0;
- for (i = 1, p1 = p; i < vm_pageout_page_count; i++) {
- tp = vm_page_next(p1);
+
+ count = 1;
+ mreq = 0;
+
+ for (tp = p; count < vm_pageout_page_count; count++) {
+ tp = vm_page_next(tp);
if (tp == NULL || tp->busy != 0 || (tp->oflags & VPO_BUSY) != 0)
break;
vm_page_test_dirty(tp);
if (tp->dirty == 0)
break;
- maf[i - 1] = p1 = tp;
- maxf++;
}
- maxb = 0;
- chkb = vm_pageout_page_count - maxf;
- for (i = 1, p1 = p; i < chkb; i++) {
- tp = vm_page_prev(p1);
+ for (p_first = p; count < vm_pageout_page_count; count++) {
+ tp = vm_page_prev(p_first);
if (tp == NULL || tp->busy != 0 || (tp->oflags & VPO_BUSY) != 0)
break;
vm_page_test_dirty(tp);
if (tp->dirty == 0)
break;
- mab[i - 1] = p1 = tp;
- maxb++;
+ p_first = tp;
+ mreq++;
}
- for (i = 0; i < maxb; i++) {
- index = (maxb - i) - 1;
- ma[index] = mab[i];
- }
- ma[maxb] = p;
- for (i = 0; i < maxf; i++) {
- index = (maxb + i) + 1;
- ma[index] = maf[i];
- }
+ for (tp = p_first, i = 0; i < count; tp = TAILQ_NEXT(tp, listq), i++)
+ ma[i] = tp;
- vm_pageout_flush(ma, maxb + maxf + 1, pagerflags, maxb + 1, &runlen);
+ vm_pageout_flush(ma, count, pagerflags, mreq, &runlen);
return (runlen);
}
OpenPOWER on IntegriCloud