diff options
| author | ngkaho1234 <ngkaho1234@gmail.com> | 2015-12-27 17:35:08 +0000 |
|---|---|---|
| committer | ngkaho1234 <ngkaho1234@gmail.com> | 2015-12-27 17:35:44 +0000 |
| commit | fa3b47a25d4759afc71556478d1e76bfca27e7ea (patch) | |
| tree | 103f09e45a4cfa42b48fbf023b1a1355e0140a34 | |
| parent | 9241e3c99524f9a87eb2c30d9e7cc5b33bff8bce (diff) | |
ext4_journal: fix jbd_trans_get_access flushing the wrong buffer.
| -rw-r--r-- | lwext4/ext4_journal.c | 9 |
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; } |
