Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/swap_pager.c
Show First 20 Lines • Show All 1,790 Lines • ▼ Show 20 Lines | for (i = 0; i < SWAP_META_PAGES; i++) { | ||||
if (sb->d[i] != SWAPBLK_NONE) | if (sb->d[i] != SWAPBLK_NONE) | ||||
res++; | res++; | ||||
} | } | ||||
} | } | ||||
return (res); | return (res); | ||||
} | } | ||||
/* | /* | ||||
* Calculates the total number of used pages, either resident or | |||||
* swapped. If the page is simultaneously resident and swapped, it is | |||||
* counted only once. | |||||
*/ | |||||
u_long | |||||
swap_pager_total_pages(vm_object_t object) | |||||
{ | |||||
struct swblk *sb; | |||||
vm_pindex_t pindex; | |||||
u_long res; | |||||
int i; | |||||
VM_OBJECT_ASSERT_LOCKED(object); | |||||
MPASS((object->flags & OBJ_SWAP) != 0); | |||||
res = object->resident_page_count; | |||||
if (pctrie_is_empty(&object->un_pager.swp.swp_blks)) | |||||
return (res); | |||||
for (pindex = 0; (sb = SWAP_PCTRIE_LOOKUP_GE( | |||||
&object->un_pager.swp.swp_blks, pindex)) != NULL;) { | |||||
pindex = sb->p + SWAP_META_PAGES; | |||||
for (i = 0; i < SWAP_META_PAGES; i++) { | |||||
if (sb->d[i] == SWAPBLK_NONE) | |||||
continue; | |||||
if (vm_page_lookup(object, pindex) == NULL) | |||||
res++; | |||||
} | |||||
} | |||||
return (res); | |||||
} | |||||
/* | |||||
* swap_pager_swapoff_object: | * swap_pager_swapoff_object: | ||||
* | * | ||||
* Page in all of the pages that have been paged out for an object | * Page in all of the pages that have been paged out for an object | ||||
* to a swap device. | * to a swap device. | ||||
*/ | */ | ||||
static void | static void | ||||
swap_pager_swapoff_object(struct swdevt *sp, vm_object_t object) | swap_pager_swapoff_object(struct swdevt *sp, vm_object_t object) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 1,329 Lines • Show Last 20 Lines |