diff options
| author | ngkaho1234 <ngkaho1234@gmail.com> | 2015-12-17 21:16:13 +0800 |
|---|---|---|
| committer | ngkaho1234 <ngkaho1234@gmail.com> | 2015-12-17 21:16:13 +0800 |
| commit | b8f9e381ce116851390ed96570bcbfdd4af29438 (patch) | |
| tree | dd1b59886c3105857ad4ab6c30e2a3f3c06cdab0 | |
| parent | 740927e660015515a8ab6c3e777e76aeffcd140f (diff) | |
ext4_journal: forcibly flush data to disk when stop journalling.
| -rw-r--r-- | lwext4/ext4_journal.c | 13 | ||||
| -rw-r--r-- | lwext4/ext4_journal.h | 1 |
2 files changed, 11 insertions, 3 deletions
diff --git a/lwext4/ext4_journal.c b/lwext4/ext4_journal.c index 49e44f3..d0032a0 100644 --- a/lwext4/ext4_journal.c +++ b/lwext4/ext4_journal.c @@ -39,6 +39,7 @@ #include "ext4_types.h" #include "ext4_fs.h" #include "ext4_super.h" +#include "ext4_journal.h" #include "ext4_errno.h" #include "ext4_blockdev.h" #include "ext4_crc32c.h" @@ -815,11 +816,17 @@ int jbd_journal_start(struct jbd_fs *jbd_fs, int jbd_journal_stop(struct jbd_journal *journal) { + int r; struct jbd_fs *jbd_fs = journal->jbd_fs; - uint32_t features_incompatible = - ext4_get32(&jbd_fs->inode_ref.fs->sb, - features_incompatible); + uint32_t features_incompatible; + + jbd_journal_commit_all(journal); + ext4_block_cache_flush(jbd_fs->inode_ref.fs->bdev); + + features_incompatible = + ext4_get32(&jbd_fs->inode_ref.fs->sb, + features_incompatible); features_incompatible &= ~EXT4_FINCOM_RECOVER; ext4_set32(&jbd_fs->inode_ref.fs->sb, features_incompatible, diff --git a/lwext4/ext4_journal.h b/lwext4/ext4_journal.h index 0cafc4f..cc9100d 100644 --- a/lwext4/ext4_journal.h +++ b/lwext4/ext4_journal.h @@ -65,6 +65,7 @@ void jbd_journal_free_trans(struct jbd_journal *journal, void jbd_journal_submit_trans(struct jbd_journal *journal, struct jbd_trans *trans); void jbd_journal_commit_one(struct jbd_journal *journal); +void jbd_journal_commit_all(struct jbd_journal *journal); #ifdef __cplusplus } |
