isolate_lru_page

来源:互联网 发布:七天网络阅卷组织代码 编辑:程序博客网 时间:2024/06/05 03:51

isolate_lru_page


int isolate_lru_page(struct page *page)
{
int ret = -EBUSY;


VM_BUG_ON_PAGE(!page_count(page), page);
WARN_RATELIMIT(PageTail(page), "trying to isolate tail page");


if (PageLRU(page)) {
struct zone *zone = page_zone(page);
struct lruvec *lruvec;


spin_lock_irq(&zone->lru_lock);
lruvec = mem_cgroup_page_lruvec(page, zone);
if (PageLRU(page)) {
int lru = page_lru(page);
get_page(page);
ClearPageLRU(page);
del_page_from_lru_list(page, lruvec, lru);
ret = 0;
}
spin_unlock_irq(&zone->lru_lock);
}
return ret;
}

static __always_inline void del_page_from_lru_list(struct page *page,struct lruvec *lruvec, enum lru_list lru)
{
list_del(&page->lru);
update_lru_size(lruvec, lru, -hpage_nr_pages(page));
}

static __always_inline void update_lru_size(struct lruvec *lruvec,enum lru_list lru, int nr_pages)
{
#ifdef CONFIG_MEMCG
mem_cgroup_update_lru_size(lruvec, lru, nr_pages);
#else
__update_lru_size(lruvec, lru, nr_pages);
#endif
}

0 0
原创粉丝点击