aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorLuden <luden@ghostmail.com>2016-03-28 22:58:16 +0000
committerZiyan <jaraidaniel@gmail.com>2016-05-01 23:35:58 +0200
commit7a27a75e1ce7be1cd4a3c524e58d6be5a902de93 (patch)
tree46e1f094a8de750c52ba06147eefd588d27e049a /mm
parentfd517955e280af6dea607a898fb1b7c71dca0846 (diff)
downloadkernel_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.c10
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