|
@@ -383,7 +383,14 @@ static void migrate_page_copy(struct page *newpage, struct page *page)
|
|
|
|
|
|
if (PageDirty(page)) {
|
|
if (PageDirty(page)) {
|
|
clear_page_dirty_for_io(page);
|
|
clear_page_dirty_for_io(page);
|
|
- set_page_dirty(newpage);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Want to mark the page and the radix tree as dirty, and
|
|
|
|
+ * redo the accounting that clear_page_dirty_for_io undid,
|
|
|
|
+ * but we can't use set_page_dirty because that function
|
|
|
|
+ * is actually a signal that all of the page has become dirty.
|
|
|
|
+ * Wheras only part of our page may be dirty.
|
|
|
|
+ */
|
|
|
|
+ __set_page_dirty_nobuffers(newpage);
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_SWAP
|
|
#ifdef CONFIG_SWAP
|