diff options
-rw-r--r-- | fs/jbd/commit.c | 16 | ||||
-rw-r--r-- | fs/jbd/transaction.c | 13 |
2 files changed, 13 insertions, 16 deletions
diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c index a38c7186c570..d2f652e6e22e 100644 --- a/fs/jbd/commit.c +++ b/fs/jbd/commit.c | |||
@@ -407,22 +407,6 @@ void journal_commit_transaction(journal_t *journal) | |||
407 | jbd_debug (3, "JBD: commit phase 2\n"); | 407 | jbd_debug (3, "JBD: commit phase 2\n"); |
408 | 408 | ||
409 | /* | 409 | /* |
410 | * First, drop modified flag: all accesses to the buffers | ||
411 | * will be tracked for a new trasaction only -bzzz | ||
412 | */ | ||
413 | spin_lock(&journal->j_list_lock); | ||
414 | if (commit_transaction->t_buffers) { | ||
415 | new_jh = jh = commit_transaction->t_buffers->b_tnext; | ||
416 | do { | ||
417 | J_ASSERT_JH(new_jh, new_jh->b_modified == 1 || | ||
418 | new_jh->b_modified == 0); | ||
419 | new_jh->b_modified = 0; | ||
420 | new_jh = new_jh->b_tnext; | ||
421 | } while (new_jh != jh); | ||
422 | } | ||
423 | spin_unlock(&journal->j_list_lock); | ||
424 | |||
425 | /* | ||
426 | * Now start flushing things to disk, in the order they appear | 410 | * Now start flushing things to disk, in the order they appear |
427 | * on the transaction lists. Data blocks go first. | 411 | * on the transaction lists. Data blocks go first. |
428 | */ | 412 | */ |
diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c index 2c9e8f5d13aa..2e9670e2237e 100644 --- a/fs/jbd/transaction.c +++ b/fs/jbd/transaction.c | |||
@@ -609,6 +609,12 @@ repeat: | |||
609 | goto done; | 609 | goto done; |
610 | 610 | ||
611 | /* | 611 | /* |
612 | * this is the first time this transaction is touching this buffer, | ||
613 | * reset the modified flag | ||
614 | */ | ||
615 | jh->b_modified = 0; | ||
616 | |||
617 | /* | ||
612 | * If there is already a copy-out version of this buffer, then we don't | 618 | * If there is already a copy-out version of this buffer, then we don't |
613 | * need to make another one | 619 | * need to make another one |
614 | */ | 620 | */ |
@@ -820,9 +826,16 @@ int journal_get_create_access(handle_t *handle, struct buffer_head *bh) | |||
820 | 826 | ||
821 | if (jh->b_transaction == NULL) { | 827 | if (jh->b_transaction == NULL) { |
822 | jh->b_transaction = transaction; | 828 | jh->b_transaction = transaction; |
829 | |||
830 | /* first access by this transaction */ | ||
831 | jh->b_modified = 0; | ||
832 | |||
823 | JBUFFER_TRACE(jh, "file as BJ_Reserved"); | 833 | JBUFFER_TRACE(jh, "file as BJ_Reserved"); |
824 | __journal_file_buffer(jh, transaction, BJ_Reserved); | 834 | __journal_file_buffer(jh, transaction, BJ_Reserved); |
825 | } else if (jh->b_transaction == journal->j_committing_transaction) { | 835 | } else if (jh->b_transaction == journal->j_committing_transaction) { |
836 | /* first access by this transaction */ | ||
837 | jh->b_modified = 0; | ||
838 | |||
826 | JBUFFER_TRACE(jh, "set next transaction"); | 839 | JBUFFER_TRACE(jh, "set next transaction"); |
827 | jh->b_next_transaction = transaction; | 840 | jh->b_next_transaction = transaction; |
828 | } | 841 | } |