ext4_journal: improve jbd_journal_alloc_block performance
authorgkostka <kostka.grzegorz@gmail.com>
Thu, 19 Jan 2017 00:04:49 +0000 (01:04 +0100)
committergkostka <kostka.grzegorz@gmail.com>
Thu, 19 Jan 2017 00:04:49 +0000 (01:04 +0100)
Purge only one journal transaction if we are run out of journal
device space.

src/ext4_journal.c

index 98e3573a4b5a61ce7c10152227324d47095f8df5..e683e10450a93bf2f71baf983a374f690e50258b 100644 (file)
@@ -1459,10 +1459,12 @@ static uint32_t jbd_journal_alloc_block(struct jbd_journal *journal,
        trans->alloc_blocks++;
        wrap(&journal->jbd_fs->sb, journal->last);
        
-       /* If there is no space left, flush all journalled
-        * blocks to disk first.*/
-       if (journal->last == journal->start)
-               jbd_journal_purge_cp_trans(journal, true, false);
+       /* If there is no space left, flush just one journalled
+        * transaction.*/
+       if (journal->last == journal->start) {
+               jbd_journal_purge_cp_trans(journal, true, true);
+               ext4_assert(journal->last != journal->start);
+       }
 
        return start_block;
 }