Messages in this thread Patch in this message | | | From | Dan Smith <> | Subject | Re: [RFC][PATCH 06/26] mm: Migrate misplaced page | Date | Tue, 03 Apr 2012 10:32:13 -0700 |
| |
PZ> XXX: hnaz, dansmith saw some bad_page() reports when using memcg, I PZ> could not reproduce -- is there something funny with the mem_cgroup PZ> calls in the below patch?
I think the problem stems from the final put_page() on the old page being called before the charge commit. I think something like the following should do the trick (and appears to work for me):
diff --git a/mm/migrate.c b/mm/migrate.c index b7fa472..fd88f4b 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1590,7 +1590,6 @@ migrate_misplaced_page(struct page *page, struct mm_struct put_page(page); /* drop " " */ unlock_page(page); - put_page(page); /* drop fault path ref & free */ page = newpage; } @@ -1599,6 +1598,9 @@ out: if (!charge) mem_cgroup_end_migration(mcg, oldpage, newpage, !rc); + if (oldpage != page) + put_page(oldpage); + if (rc) { unlock_page(newpage); __free_page(newpage);
-- Dan Smith IBM Linux Technology Center
| |