diff options
author | Johannes Weiner <hannes@cmpxchg.org> | 2016-03-15 17:57:22 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-15 19:55:16 -0400 |
commit | 62cccb8c8e7a3ca233f49d5e7dcb1557d25465cd (patch) | |
tree | 43a902faf461c65393a4efebf9ff9622017b92b1 /mm/truncate.c | |
parent | 6a93ca8fde3cfce0f00f02281139a377c83e8d8c (diff) |
mm: simplify lock_page_memcg()
Now that migration doesn't clear page->mem_cgroup of live pages anymore,
it's safe to make lock_page_memcg() and the memcg stat functions take
pages, and spare the callers from memcg objects.
[akpm@linux-foundation.org: fix warnings]
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Suggested-by: Vladimir Davydov <vdavydov@virtuozzo.com>
Acked-by: Vladimir Davydov <vdavydov@virtuozzo.com>
Cc: Michal Hocko <mhocko@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/truncate.c')
-rw-r--r-- | mm/truncate.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/mm/truncate.c b/mm/truncate.c index 51a24f6a555d..87311af936f2 100644 --- a/mm/truncate.c +++ b/mm/truncate.c | |||
@@ -519,7 +519,6 @@ EXPORT_SYMBOL(invalidate_mapping_pages); | |||
519 | static int | 519 | static int |
520 | invalidate_complete_page2(struct address_space *mapping, struct page *page) | 520 | invalidate_complete_page2(struct address_space *mapping, struct page *page) |
521 | { | 521 | { |
522 | struct mem_cgroup *memcg; | ||
523 | unsigned long flags; | 522 | unsigned long flags; |
524 | 523 | ||
525 | if (page->mapping != mapping) | 524 | if (page->mapping != mapping) |
@@ -528,15 +527,15 @@ invalidate_complete_page2(struct address_space *mapping, struct page *page) | |||
528 | if (page_has_private(page) && !try_to_release_page(page, GFP_KERNEL)) | 527 | if (page_has_private(page) && !try_to_release_page(page, GFP_KERNEL)) |
529 | return 0; | 528 | return 0; |
530 | 529 | ||
531 | memcg = lock_page_memcg(page); | 530 | lock_page_memcg(page); |
532 | spin_lock_irqsave(&mapping->tree_lock, flags); | 531 | spin_lock_irqsave(&mapping->tree_lock, flags); |
533 | if (PageDirty(page)) | 532 | if (PageDirty(page)) |
534 | goto failed; | 533 | goto failed; |
535 | 534 | ||
536 | BUG_ON(page_has_private(page)); | 535 | BUG_ON(page_has_private(page)); |
537 | __delete_from_page_cache(page, NULL, memcg); | 536 | __delete_from_page_cache(page, NULL); |
538 | spin_unlock_irqrestore(&mapping->tree_lock, flags); | 537 | spin_unlock_irqrestore(&mapping->tree_lock, flags); |
539 | unlock_page_memcg(memcg); | 538 | unlock_page_memcg(page); |
540 | 539 | ||
541 | if (mapping->a_ops->freepage) | 540 | if (mapping->a_ops->freepage) |
542 | mapping->a_ops->freepage(page); | 541 | mapping->a_ops->freepage(page); |
@@ -545,7 +544,7 @@ invalidate_complete_page2(struct address_space *mapping, struct page *page) | |||
545 | return 1; | 544 | return 1; |
546 | failed: | 545 | failed: |
547 | spin_unlock_irqrestore(&mapping->tree_lock, flags); | 546 | spin_unlock_irqrestore(&mapping->tree_lock, flags); |
548 | unlock_page_memcg(memcg); | 547 | unlock_page_memcg(page); |
549 | return 0; | 548 | return 0; |
550 | } | 549 | } |
551 | 550 | ||