Revert " mm/lru: revise the comments of lru_lock"
This reverts commit 3df720cae4.
This commit is contained in:
parent
704259482e
commit
bb589f37a6
|
|
@ -450,22 +450,6 @@ out:
|
|||
|
||||
struct lruvec *mem_cgroup_page_lruvec(struct page *, struct pglist_data *);
|
||||
|
||||
static inline bool lruvec_holds_page_lru_lock(struct page *page,
|
||||
struct lruvec *lruvec)
|
||||
{
|
||||
pg_data_t *pgdat = page_pgdat(page);
|
||||
const struct mem_cgroup *memcg;
|
||||
struct mem_cgroup_per_node *mz;
|
||||
|
||||
if (mem_cgroup_disabled())
|
||||
return lruvec == &pgdat->lruvec;
|
||||
|
||||
mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
|
||||
memcg = page->mem_cgroup ? : root_mem_cgroup;
|
||||
|
||||
return lruvec->pgdat == pgdat && mz->memcg == memcg;
|
||||
}
|
||||
|
||||
struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
|
||||
|
||||
struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm);
|
||||
|
|
@ -971,13 +955,6 @@ static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page,
|
|||
return &pgdat->lruvec;
|
||||
}
|
||||
|
||||
static inline bool lruvec_holds_page_lru_lock(struct page *page,
|
||||
struct lruvec *lruvec)
|
||||
{
|
||||
pg_data_t *pgdat = page_pgdat(page);
|
||||
return lruvec == &pgdat->__lruvec;
|
||||
}
|
||||
|
||||
static inline bool mm_match_cgroup(struct mm_struct *mm,
|
||||
struct mem_cgroup *memcg)
|
||||
{
|
||||
|
|
@ -1393,34 +1370,6 @@ static inline void unlock_page_lruvec_irqrestore(struct lruvec *lruvec,
|
|||
spin_unlock_irqrestore(&lruvec->lru_lock, flags);
|
||||
}
|
||||
|
||||
/* Don't lock again iff page's lruvec locked */
|
||||
static inline struct lruvec *relock_page_lruvec_irq(struct page *page,
|
||||
struct lruvec *locked_lruvec)
|
||||
{
|
||||
if (locked_lruvec) {
|
||||
if (lruvec_holds_page_lru_lock(page, locked_lruvec))
|
||||
return locked_lruvec;
|
||||
|
||||
unlock_page_lruvec_irq(locked_lruvec);
|
||||
}
|
||||
|
||||
return lock_page_lruvec_irq(page);
|
||||
}
|
||||
|
||||
/* Don't lock again iff page's lruvec locked */
|
||||
static inline struct lruvec *relock_page_lruvec_irqsave(struct page *page,
|
||||
struct lruvec *locked_lruvec, unsigned long *flags)
|
||||
{
|
||||
if (locked_lruvec) {
|
||||
if (lruvec_holds_page_lru_lock(page, locked_lruvec))
|
||||
return locked_lruvec;
|
||||
|
||||
unlock_page_lruvec_irqrestore(locked_lruvec, *flags);
|
||||
}
|
||||
|
||||
return lock_page_lruvec_irqsave(page, flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CGROUP_WRITEBACK
|
||||
|
||||
struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb);
|
||||
|
|
|
|||
10
mm/mlock.c
10
mm/mlock.c
|
|
@ -273,7 +273,15 @@ static void __munlock_pagevec(struct pagevec *pvec, struct zone *zone)
|
|||
* so we can spare the get_page() here.
|
||||
*/
|
||||
if (TestClearPageLRU(page)) {
|
||||
lruvec = relock_page_lruvec_irq(page, lruvec);
|
||||
struct lruvec *new_lruvec;
|
||||
|
||||
new_lruvec = mem_cgroup_page_lruvec(page,
|
||||
page_pgdat(page));
|
||||
if (new_lruvec != lruvec) {
|
||||
if (lruvec)
|
||||
unlock_page_lruvec_irq(lruvec);
|
||||
lruvec = lock_page_lruvec_irq(page);
|
||||
}
|
||||
del_page_from_lru_list(page, lruvec,
|
||||
page_lru(page));
|
||||
continue;
|
||||
|
|
|
|||
30
mm/swap.c
30
mm/swap.c
|
|
@ -194,12 +194,17 @@ static void pagevec_lru_move_fn(struct pagevec *pvec,
|
|||
|
||||
for (i = 0; i < pagevec_count(pvec); i++) {
|
||||
struct page *page = pvec->pages[i];
|
||||
struct lruvec *new_lruvec;
|
||||
|
||||
/* block memcg migration during page moving between lru */
|
||||
if (!TestClearPageLRU(page))
|
||||
continue;
|
||||
|
||||
lruvec = relock_page_lruvec_irqsave(page, lruvec, &flags);
|
||||
new_lruvec = mem_cgroup_page_lruvec(page, page_pgdat(page));
|
||||
if (lruvec != new_lruvec) {
|
||||
if (lruvec)
|
||||
unlock_page_lruvec_irqrestore(lruvec, flags);
|
||||
lruvec = lock_page_lruvec_irqsave(page, &flags);
|
||||
}
|
||||
(*move_fn)(page, lruvec);
|
||||
|
||||
SetPageLRU(page);
|
||||
|
|
@ -785,10 +790,15 @@ void release_pages(struct page **pages, int nr)
|
|||
}
|
||||
|
||||
if (PageLRU(page)) {
|
||||
struct lruvec *prev_lruvec = lruvec;
|
||||
lruvec = relock_page_lruvec_irqsave(page, lruvec, &flags);
|
||||
if (prev_lruvec != lruvec)
|
||||
struct lruvec *new_lruvec;
|
||||
|
||||
new_lruvec = mem_cgroup_page_lruvec(page, page_pgdat(page));
|
||||
if (new_lruvec != lruvec) {
|
||||
if (lruvec)
|
||||
unlock_page_lruvec_irqrestore(lruvec, flags);
|
||||
lock_batch = 0;
|
||||
lruvec = lock_page_lruvec_irqsave(page, &flags);
|
||||
}
|
||||
|
||||
VM_BUG_ON_PAGE(!PageLRU(page), page);
|
||||
__ClearPageLRU(page);
|
||||
|
|
@ -923,7 +933,15 @@ void __pagevec_lru_add(struct pagevec *pvec)
|
|||
|
||||
for (i = 0; i < pagevec_count(pvec); i++) {
|
||||
struct page *page = pvec->pages[i];
|
||||
lruvec = relock_page_lruvec_irqsave(page, lruvec, &flags);
|
||||
struct lruvec *new_lruvec;
|
||||
|
||||
new_lruvec = mem_cgroup_page_lruvec(page, page_pgdat(page));
|
||||
if (lruvec != new_lruvec) {
|
||||
if (lruvec)
|
||||
unlock_page_lruvec_irqrestore(lruvec, flags);
|
||||
lruvec = lock_page_lruvec_irqsave(page, &flags);
|
||||
}
|
||||
|
||||
__pagevec_lru_add_fn(page, lruvec);
|
||||
}
|
||||
if (lruvec)
|
||||
|
|
|
|||
12
mm/vmscan.c
12
mm/vmscan.c
|
|
@ -1936,7 +1936,8 @@ static unsigned noinline_for_stack move_pages_to_lru(struct lruvec *lruvec,
|
|||
list_add(&page->lru, &pages_to_free);
|
||||
continue;
|
||||
}
|
||||
VM_BUG_ON_PAGE(!lruvec_holds_page_lru_lock(page, lruvec), page);
|
||||
VM_BUG_ON_PAGE(mem_cgroup_page_lruvec(page, page_pgdat(page))
|
||||
!= lruvec, page);
|
||||
lru = page_lru(page);
|
||||
nr_pages = hpage_nr_pages(page);
|
||||
|
||||
|
|
@ -4758,6 +4759,7 @@ void check_move_unevictable_pages(struct pagevec *pvec)
|
|||
|
||||
for (i = 0; i < pvec->nr; i++) {
|
||||
struct page *page = pvec->pages[i];
|
||||
struct lruvec *new_lruvec;
|
||||
|
||||
pgscanned++;
|
||||
|
||||
|
|
@ -4765,7 +4767,13 @@ void check_move_unevictable_pages(struct pagevec *pvec)
|
|||
if (!TestClearPageLRU(page))
|
||||
continue;
|
||||
|
||||
lruvec = relock_page_lruvec_irq(page, lruvec);
|
||||
new_lruvec = mem_cgroup_page_lruvec(page, page_pgdat(page));
|
||||
if (lruvec != new_lruvec) {
|
||||
if (lruvec)
|
||||
unlock_page_lruvec_irq(lruvec);
|
||||
lruvec = lock_page_lruvec_irq(page);
|
||||
}
|
||||
|
||||
if (page_evictable(page) && PageUnevictable(page)) {
|
||||
enum lru_list lru = page_lru_base_type(page);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue