diff options
author | Luden <luden@ghostmail.com> | 2016-03-28 22:58:16 +0000 |
---|---|---|
committer | Ziyan <jaraidaniel@gmail.com> | 2016-05-01 23:35:58 +0200 |
commit | 7a27a75e1ce7be1cd4a3c524e58d6be5a902de93 (patch) | |
tree | 46e1f094a8de750c52ba06147eefd588d27e049a /mm | |
parent | fd517955e280af6dea607a898fb1b7c71dca0846 (diff) | |
download | kernel_samsung_tuna-7a27a75e1ce7be1cd4a3c524e58d6be5a902de93.tar.gz kernel_samsung_tuna-7a27a75e1ce7be1cd4a3c524e58d6be5a902de93.tar.bz2 kernel_samsung_tuna-7a27a75e1ce7be1cd4a3c524e58d6be5a902de93.zip |
Write dirty pages in migration only in SYNC mode.
I'm not super-sure about this whole idea of dirty pages writing,
but so far haven't seen any problems attributable to it - so leaving
it in there, but restricting to SYNC migrations only.
Diffstat (limited to 'mm')
-rw-r--r-- | mm/migrate.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index 982656e2707..03b3c874b9b 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -758,7 +758,7 @@ static int move_to_new_page(struct page *newpage, struct page *page, return rc; } -static void write_dirty_buffers(struct page *page) +static void write_dirty_buffers_sync(struct page *page) { struct buffer_head *head = page_buffers(page); struct buffer_head *bh; @@ -919,12 +919,14 @@ static int __unmap_and_move(struct page *page, struct page *newpage, VM_BUG_ON(PageAnon(page)); if (page_has_private(page)) { /* try_to_free_buffers() call below won't try to write - * buffers if they're dirty, so it will fail. */ - if (PageDirty(page)) { + * buffers if they're dirty, so it will fail. Do this + * only in SYNC mode, though, when extra delay is + * acceptable. */ + if (PageDirty(page) && mode != MIGRATE_ASYNC) { #ifdef CONFIG_CMA_DEBUG_VERBOSE pr_info("__unmap_and_move: flushing dirty page buffers ...\n"); #endif - write_dirty_buffers(page); + write_dirty_buffers_sync(page); } if (!try_to_free_buffers(page)) { #ifdef CONFIG_CMA_DEBUG_VERBOSE |