ext4_journal: fix block tag written always be the last tag.
[lwext4.git] / lwext4 / ext4_journal.c
index f291722c76d54a18c67b7079760526ca88e99bb4..033f3a49fd5d6fda28b86881279d75433af438e9 100644 (file)
@@ -1123,13 +1123,16 @@ int jbd_trans_get_access(struct jbd_journal *journal,
 {
        int r = EOK;
        struct ext4_fs *fs = journal->jbd_fs->inode_ref.fs;
+       struct jbd_buf *jbd_buf = block->buf->end_write_arg;
 
        /* If the buffer has already been modified, we should
         * flush dirty data in this buffer to disk.*/
        if (ext4_bcache_test_flag(block->buf, BC_DIRTY) &&
-           block->buf->end_write == jbd_trans_end_write &&
-           block->buf->end_write_arg != trans) {
-               r = ext4_block_flush_buf(fs->bdev, block->buf);
+           block->buf->end_write == jbd_trans_end_write) {
+               ext4_assert(jbd_buf);
+               if (jbd_buf->trans != trans)
+                       r = ext4_block_flush_buf(fs->bdev, block->buf);
+
        }
        return r;
 }
@@ -1400,6 +1403,8 @@ again:
                tag_info.uuid_exist = uuid_exist;
                if (i == trans->data_cnt - 1)
                        tag_info.last_tag = true;
+               else
+                       tag_info.last_tag = false;
 
                if (uuid_exist)
                        memcpy(tag_info.uuid, journal->jbd_fs->sb.uuid,