diff options
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index ce7b35d024e9..01e0c725de65 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -993,6 +993,16 @@ void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru) | |||
993 | return; | 993 | return; |
994 | pc = lookup_page_cgroup(page); | 994 | pc = lookup_page_cgroup(page); |
995 | VM_BUG_ON(PageCgroupAcctLRU(pc)); | 995 | VM_BUG_ON(PageCgroupAcctLRU(pc)); |
996 | /* | ||
997 | * putback: charge: | ||
998 | * SetPageLRU SetPageCgroupUsed | ||
999 | * smp_mb smp_mb | ||
1000 | * PageCgroupUsed && add to memcg LRU PageLRU && add to memcg LRU | ||
1001 | * | ||
1002 | * Ensure that one of the two sides adds the page to the memcg | ||
1003 | * LRU during a race. | ||
1004 | */ | ||
1005 | smp_mb(); | ||
996 | if (!PageCgroupUsed(pc)) | 1006 | if (!PageCgroupUsed(pc)) |
997 | return; | 1007 | return; |
998 | /* Ensure pc->mem_cgroup is visible after reading PCG_USED. */ | 1008 | /* Ensure pc->mem_cgroup is visible after reading PCG_USED. */ |
@@ -1044,7 +1054,16 @@ static void mem_cgroup_lru_add_after_commit(struct page *page) | |||
1044 | unsigned long flags; | 1054 | unsigned long flags; |
1045 | struct zone *zone = page_zone(page); | 1055 | struct zone *zone = page_zone(page); |
1046 | struct page_cgroup *pc = lookup_page_cgroup(page); | 1056 | struct page_cgroup *pc = lookup_page_cgroup(page); |
1047 | 1057 | /* | |
1058 | * putback: charge: | ||
1059 | * SetPageLRU SetPageCgroupUsed | ||
1060 | * smp_mb smp_mb | ||
1061 | * PageCgroupUsed && add to memcg LRU PageLRU && add to memcg LRU | ||
1062 | * | ||
1063 | * Ensure that one of the two sides adds the page to the memcg | ||
1064 | * LRU during a race. | ||
1065 | */ | ||
1066 | smp_mb(); | ||
1048 | /* taking care of that the page is added to LRU while we commit it */ | 1067 | /* taking care of that the page is added to LRU while we commit it */ |
1049 | if (likely(!PageLRU(page))) | 1068 | if (likely(!PageLRU(page))) |
1050 | return; | 1069 | return; |