fs: jbd2: force commit to free jbd2's cma/isolated page
authorMarek Szyprowski <m.szyprowski@samsung.com>
Tue, 4 Sep 2012 08:44:49 +0000 (10:44 +0200)
committerChanho Park <chanho61.park@samsung.com>
Tue, 18 Nov 2014 02:42:20 +0000 (11:42 +0900)
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
fs/jbd2/transaction.c

index ec34e11..1df5741 100644 (file)
@@ -1781,8 +1781,22 @@ int jbd2_journal_try_to_free_buffers(journal_t *journal,
                __journal_try_to_free_buffer(journal, bh);
                jbd2_journal_put_journal_head(jh);
                jbd_unlock_bh_state(bh);
+
+#ifndef CONFIG_CMA
                if (buffer_jbd(bh))
                        goto busy;
+#else
+               if (buffer_jbd(bh)) {
+                       unsigned mt = get_pageblock_migratetype(page);
+                       /*
+                        * Workaround: In case of CMA page, just commit journal.
+                       */
+                       if (mt == MIGRATE_ISOLATE || mt == MIGRATE_CMA)
+                               jbd2_journal_force_commit(journal);
+                       else
+                               goto busy;
+               }
+#endif
        } while ((bh = bh->b_this_page) != head);
 
        ret = try_to_free_buffers(page);