Page MenuHomeFreeBSD

D46173.diff
No OneTemporary

D46173.diff

diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -1115,17 +1115,14 @@
vm_object_page_collect_flush(vm_object_t object, vm_page_t p, int pagerflags,
int flags, boolean_t *allclean, boolean_t *eio)
{
- vm_page_t ma[vm_pageout_page_count], p_first, tp;
- int count, i, mreq, runlen;
+ vm_page_t ma[2 * vm_pageout_page_count], tp;
+ int count, mreq, runlen;
vm_page_lock_assert(p, MA_NOTOWNED);
vm_page_assert_xbusied(p);
VM_OBJECT_ASSERT_WLOCKED(object);
-
- count = 1;
- mreq = 0;
-
- for (tp = p; count < vm_pageout_page_count; count++) {
+ ma[vm_pageout_page_count] = p;
+ for (count = 1, tp = p; count < vm_pageout_page_count; count++) {
tp = vm_page_next(tp);
if (tp == NULL || vm_page_tryxbusy(tp) == 0)
break;
@@ -1133,24 +1130,22 @@
vm_page_xunbusy(tp);
break;
}
+ ma[vm_pageout_page_count + count] = tp;
}
- for (p_first = p; count < vm_pageout_page_count; count++) {
- tp = vm_page_prev(p_first);
+ for (mreq = 0, tp = p; count < vm_pageout_page_count; count++, mreq++) {
+ tp = vm_page_prev(tp);
if (tp == NULL || vm_page_tryxbusy(tp) == 0)
break;
if (!vm_object_page_remove_write(tp, flags, allclean)) {
vm_page_xunbusy(tp);
break;
}
- p_first = tp;
- mreq++;
+ ma[vm_pageout_page_count - 1 - mreq] = tp;
}
- for (tp = p_first, i = 0; i < count; tp = TAILQ_NEXT(tp, listq), i++)
- ma[i] = tp;
-
- vm_pageout_flush(ma, count, pagerflags, mreq, &runlen, eio);
+ vm_pageout_flush(&ma[vm_pageout_page_count - mreq], count, pagerflags,
+ mreq, &runlen, eio);
return (runlen);
}

File Metadata

Mime Type
text/plain
Expires
Wed, Feb 12, 1:05 PM (19 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16610931
Default Alt Text
D46173.diff (1 KB)

Event Timeline