summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorngkaho1234 <ngkaho1234@gmail.com>2015-12-24 05:19:10 +0000
committerngkaho1234 <ngkaho1234@gmail.com>2015-12-24 05:19:10 +0000
commit02cad7eee3a935c99dfd5163accb214af503a32a (patch)
tree6a8a39c4a922a941438d3318863268fb5c0c750a
parente353c4e1812bff98f28c464f6b999a9b47dc8f7a (diff)
ext4_journal: add trans parameter to jbd_trans_get_access routine.
-rw-r--r--lwext4/ext4.c2
-rw-r--r--lwext4/ext4_journal.c5
-rw-r--r--lwext4/ext4_journal.h1
3 files changed, 6 insertions, 2 deletions
diff --git a/lwext4/ext4.c b/lwext4/ext4.c
index b63f65b..c7fc2f8 100644
--- a/lwext4/ext4.c
+++ b/lwext4/ext4.c
@@ -2562,7 +2562,7 @@ int ext4_test_journal(const char *mount_point)
switch (rand() % 2) {
case 0:
- r = jbd_trans_get_access(journal, &block);
+ r = jbd_trans_get_access(journal, t, &block);
if (r != EOK) {
jbd_journal_free_trans(journal, t,
true);
diff --git a/lwext4/ext4_journal.c b/lwext4/ext4_journal.c
index e5dab1e..ada92ff 100644
--- a/lwext4/ext4_journal.c
+++ b/lwext4/ext4_journal.c
@@ -1094,9 +1094,11 @@ static void jbd_trans_end_write(struct ext4_bcache *bc __unused,
/**@brief gain access to it before making any modications.
* @param journal current journal session
+ * @param trans transaction
* @param block descriptor
* @return standard error code.*/
int jbd_trans_get_access(struct jbd_journal *journal,
+ struct jbd_trans *trans,
struct ext4_block *block)
{
int r = EOK;
@@ -1105,7 +1107,8 @@ int jbd_trans_get_access(struct jbd_journal *journal,
/* 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 == jbd_trans_end_write &&
+ block->buf->end_write_arg != trans) {
r = ext4_block_flush_buf(fs->bdev, block->buf);
}
return r;
diff --git a/lwext4/ext4_journal.h b/lwext4/ext4_journal.h
index d68c708..232b7ab 100644
--- a/lwext4/ext4_journal.h
+++ b/lwext4/ext4_journal.h
@@ -56,6 +56,7 @@ int jbd_journal_start(struct jbd_fs *jbd_fs,
int jbd_journal_stop(struct jbd_journal *journal);
struct jbd_trans *jbd_journal_new_trans(struct jbd_journal *journal);
int jbd_trans_get_access(struct jbd_journal *journal,
+ struct jbd_trans *trans,
struct ext4_block *block);
int jbd_trans_set_block_dirty(struct jbd_trans *trans,
struct ext4_block *block);