|
@@ -545,7 +545,7 @@ int remove_mapping(struct address_space *mapping, struct page *page)
|
|
|
*/
|
|
|
void putback_lru_page(struct page *page)
|
|
|
{
|
|
|
- int lru;
|
|
|
+ bool is_unevictable;
|
|
|
int was_unevictable = PageUnevictable(page);
|
|
|
|
|
|
VM_BUG_ON(PageLRU(page));
|
|
@@ -560,14 +560,14 @@ redo:
|
|
|
* unevictable page on [in]active list.
|
|
|
* We know how to handle that.
|
|
|
*/
|
|
|
- lru = page_lru_base_type(page);
|
|
|
+ is_unevictable = false;
|
|
|
lru_cache_add(page);
|
|
|
} else {
|
|
|
/*
|
|
|
* Put unevictable pages directly on zone's unevictable
|
|
|
* list.
|
|
|
*/
|
|
|
- lru = LRU_UNEVICTABLE;
|
|
|
+ is_unevictable = true;
|
|
|
add_page_to_unevictable_list(page);
|
|
|
/*
|
|
|
* When racing with an mlock or AS_UNEVICTABLE clearing
|
|
@@ -587,7 +587,7 @@ redo:
|
|
|
* page is on unevictable list, it never be freed. To avoid that,
|
|
|
* check after we added it to the list, again.
|
|
|
*/
|
|
|
- if (lru == LRU_UNEVICTABLE && page_evictable(page)) {
|
|
|
+ if (is_unevictable && page_evictable(page)) {
|
|
|
if (!isolate_lru_page(page)) {
|
|
|
put_page(page);
|
|
|
goto redo;
|
|
@@ -598,9 +598,9 @@ redo:
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
- if (was_unevictable && lru != LRU_UNEVICTABLE)
|
|
|
+ if (was_unevictable && !is_unevictable)
|
|
|
count_vm_event(UNEVICTABLE_PGRESCUED);
|
|
|
- else if (!was_unevictable && lru == LRU_UNEVICTABLE)
|
|
|
+ else if (!was_unevictable && is_unevictable)
|
|
|
count_vm_event(UNEVICTABLE_PGCULLED);
|
|
|
|
|
|
put_page(page); /* drop ref from isolate */
|