mm: remove unnecessary uses of lock_page_memcg()
There are several users that nest lock_page_memcg() inside lock_page() to prevent page->mem_cgroup from changing. But the page lock prevents pages from moving between cgroups, so that is unnecessary overhead. Remove lock_page_memcg() in contexts with locked contexts and fix the debug code in the page stat functions to be okay with the page lock. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> 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>
This commit is contained in:

committed by
Linus Torvalds

parent
62cccb8c8e
commit
fdf1cdb91b
@@ -2700,7 +2700,6 @@ int clear_page_dirty_for_io(struct page *page)
|
||||
* always locked coming in here, so we get the desired
|
||||
* exclusion.
|
||||
*/
|
||||
lock_page_memcg(page);
|
||||
wb = unlocked_inode_to_wb_begin(inode, &locked);
|
||||
if (TestClearPageDirty(page)) {
|
||||
mem_cgroup_dec_page_stat(page, MEM_CGROUP_STAT_DIRTY);
|
||||
@@ -2709,7 +2708,6 @@ int clear_page_dirty_for_io(struct page *page)
|
||||
ret = 1;
|
||||
}
|
||||
unlocked_inode_to_wb_end(inode, locked);
|
||||
unlock_page_memcg(page);
|
||||
return ret;
|
||||
}
|
||||
return TestClearPageDirty(page);
|
||||
|
Reference in New Issue
Block a user