summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorngkaho1234 <ngkaho1234@gmail.com>2015-12-27 17:35:08 +0000
committerngkaho1234 <ngkaho1234@gmail.com>2015-12-27 17:35:44 +0000
commitfa3b47a25d4759afc71556478d1e76bfca27e7ea (patch)
tree103f09e45a4cfa42b48fbf023b1a1355e0140a34
parent9241e3c99524f9a87eb2c30d9e7cc5b33bff8bce (diff)
ext4_journal: fix jbd_trans_get_access flushing the wrong buffer.
-rw-r--r--lwext4/ext4_journal.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lwext4/ext4_journal.c b/lwext4/ext4_journal.c
index f291722..98cc88f 100644
--- a/lwext4/ext4_journal.c
+++ b/lwext4/ext4_journal.c
@@ -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;
}