diff options
-rw-r--r-- | mm/migrate.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index 4e0eccca5e26..449d77d409f5 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -383,7 +383,14 @@ static void migrate_page_copy(struct page *newpage, struct page *page) | |||
383 | 383 | ||
384 | if (PageDirty(page)) { | 384 | if (PageDirty(page)) { |
385 | clear_page_dirty_for_io(page); | 385 | clear_page_dirty_for_io(page); |
386 | set_page_dirty(newpage); | 386 | /* |
387 | * Want to mark the page and the radix tree as dirty, and | ||
388 | * redo the accounting that clear_page_dirty_for_io undid, | ||
389 | * but we can't use set_page_dirty because that function | ||
390 | * is actually a signal that all of the page has become dirty. | ||
391 | * Wheras only part of our page may be dirty. | ||
392 | */ | ||
393 | __set_page_dirty_nobuffers(newpage); | ||
387 | } | 394 | } |
388 | 395 | ||
389 | #ifdef CONFIG_SWAP | 396 | #ifdef CONFIG_SWAP |