| |
| 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; |
| } |