63 lines
1.1 KiB
C
63 lines
1.1 KiB
C
|
|
static inline void
|
|
add_page_to_active_list(struct zone *zone, struct page *page)
|
|
{
|
|
list_add(&page->lru, &zone->active_list);
|
|
zone->nr_active++;
|
|
}
|
|
|
|
static inline void
|
|
add_page_to_inactive_list(struct zone *zone, struct page *page)
|
|
{
|
|
list_add(&page->lru, &zone->inactive_list);
|
|
zone->nr_inactive++;
|
|
}
|
|
|
|
static inline void
|
|
del_page_from_active_list(struct zone *zone, struct page *page)
|
|
{
|
|
list_del(&page->lru);
|
|
zone->nr_active--;
|
|
}
|
|
|
|
static inline void
|
|
del_page_from_inactive_list(struct zone *zone, struct page *page)
|
|
{
|
|
list_del(&page->lru);
|
|
zone->nr_inactive--;
|
|
}
|
|
|
|
static inline void
|
|
del_page_from_lru(struct zone *zone, struct page *page)
|
|
{
|
|
list_del(&page->lru);
|
|
if (PageActive(page)) {
|
|
ClearPageActive(page);
|
|
zone->nr_active--;
|
|
} else {
|
|
zone->nr_inactive--;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Isolate one page from the LRU lists.
|
|
*
|
|
* - zone->lru_lock must be held
|
|
*/
|
|
static inline int __isolate_lru_page(struct page *page)
|
|
{
|
|
if (unlikely(!TestClearPageLRU(page)))
|
|
return 0;
|
|
|
|
if (get_page_testone(page)) {
|
|
/*
|
|
* It is being freed elsewhere
|
|
*/
|
|
__put_page(page);
|
|
SetPageLRU(page);
|
|
return -ENOENT;
|
|
}
|
|
|
|
return 1;
|
|
}
|