Re: [PATCH 1/3] When migrate_pages returns 0, all pages must have been released
From: Christoph Lameter <hidden>
Date: 2011-01-20 18:49:22
Also in:
lkml
On Thu, 20 Jan 2011, Andrea Arcangeli wrote:
Hello, On Thu, Jan 20, 2011 at 11:30:35AM -0600, Christoph Lameter wrote:quoted
On Fri, 21 Jan 2011, Minchan Kim wrote:quoted
diff --git a/mm/migrate.c b/mm/migrate.c index 46fe8cc..7d34237 100644 --- a/mm/migrate.c +++ b/mm/migrate.c@@ -772,6 +772,7 @@ uncharge: unlock: unlock_page(page); +move_newpage: if (rc != -EAGAIN) { /* * A page that has been migrated has all references@@ -785,8 +786,6 @@ unlock: putback_lru_page(page); } -move_newpage: - /* * Move the new page to the LRU. If migration was not successful * then this will free the page.What does this do? Not covered by the description.It makes a difference for the two goto move_newpage, when rc = 0. Otherwise the function will return 0, despite putback_lru_page(page) wasn't called (and the caller of migrate_pages won't call putback_lru_pages if migrate_pages returned 0).
Think about the difference: Moving the move_newpage will now cause another removal and freeing of the page if rc != -EAGAIN. The first goto move_newpage (because page count is 1) will now mean that the page is freed twice. One because of the rc != EAGAIN branch and then another time by the following putback_lru_page(). -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>