Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/vm_pageout.c
Show First 20 Lines • Show All 539 Lines • ▼ Show 20 Lines | case VM_PAGER_FAIL: | ||||
* optimization that prevents the page daemon from | * optimization that prevents the page daemon from | ||||
* wasting CPU cycles on pages that cannot be reclaimed | * wasting CPU cycles on pages that cannot be reclaimed | ||||
* becase no swap device is configured. | * becase no swap device is configured. | ||||
* | * | ||||
* Otherwise, reactivate the page so that it doesn't | * Otherwise, reactivate the page so that it doesn't | ||||
* clog the laundry and inactive queues. (We will try | * clog the laundry and inactive queues. (We will try | ||||
* paging it out again later.) | * paging it out again later.) | ||||
*/ | */ | ||||
if (object->type == OBJT_SWAP && | if ((object->flags & OBJ_SWAP) != 0 && | ||||
pageout_status[i] == VM_PAGER_FAIL) { | pageout_status[i] == VM_PAGER_FAIL) { | ||||
vm_page_unswappable(mt); | vm_page_unswappable(mt); | ||||
numpagedout++; | numpagedout++; | ||||
} else | } else | ||||
vm_page_activate(mt); | vm_page_activate(mt); | ||||
if (eio != NULL && i >= mreq && i - mreq < runlen) | if (eio != NULL && i >= mreq && i - mreq < runlen) | ||||
*eio = TRUE; | *eio = TRUE; | ||||
break; | break; | ||||
▲ Show 20 Lines • Show All 335 Lines • ▼ Show 20 Lines | free_page: | ||||
* manipulating the page, check for a last-second | * manipulating the page, check for a last-second | ||||
* reference. | * reference. | ||||
*/ | */ | ||||
if (vm_pageout_defer(m, queue, true)) | if (vm_pageout_defer(m, queue, true)) | ||||
goto skip_page; | goto skip_page; | ||||
vm_page_free(m); | vm_page_free(m); | ||||
VM_CNT_INC(v_dfree); | VM_CNT_INC(v_dfree); | ||||
} else if ((object->flags & OBJ_DEAD) == 0) { | } else if ((object->flags & OBJ_DEAD) == 0) { | ||||
if (object->type != OBJT_SWAP && | if ((object->flags & OBJ_SWAP) == 0 && | ||||
object->type != OBJT_DEFAULT) | object->type != OBJT_DEFAULT) | ||||
pageout_ok = true; | pageout_ok = true; | ||||
else if (disable_swap_pageouts) | else if (disable_swap_pageouts) | ||||
pageout_ok = false; | pageout_ok = false; | ||||
else | else | ||||
pageout_ok = true; | pageout_ok = true; | ||||
if (!pageout_ok) { | if (!pageout_ok) { | ||||
vm_page_launder(m); | vm_page_launder(m); | ||||
▲ Show 20 Lines • Show All 976 Lines • ▼ Show 20 Lines | VM_MAP_ENTRY_FOREACH(entry, map) { | ||||
if (obj == NULL) | if (obj == NULL) | ||||
continue; | continue; | ||||
if ((entry->eflags & MAP_ENTRY_NEEDS_COPY) != 0 && | if ((entry->eflags & MAP_ENTRY_NEEDS_COPY) != 0 && | ||||
obj->ref_count != 1) | obj->ref_count != 1) | ||||
continue; | continue; | ||||
switch (obj->type) { | switch (obj->type) { | ||||
case OBJT_DEFAULT: | case OBJT_DEFAULT: | ||||
case OBJT_SWAP: | case OBJT_SWAP: | ||||
case OBJT_SWAP_TMPFS: | |||||
case OBJT_PHYS: | case OBJT_PHYS: | ||||
case OBJT_VNODE: | case OBJT_VNODE: | ||||
res += obj->resident_page_count; | res += obj->resident_page_count; | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
return (res); | return (res); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 513 Lines • Show Last 20 Lines |