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 |
