diff options
Diffstat (limited to 'fs/jbd/journal.c')
-rw-r--r-- | fs/jbd/journal.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/fs/jbd/journal.c b/fs/jbd/journal.c index bd224eec9b07..99c71940155a 100644 --- a/fs/jbd/journal.c +++ b/fs/jbd/journal.c | |||
@@ -565,6 +565,38 @@ int log_wait_commit(journal_t *journal, tid_t tid) | |||
565 | } | 565 | } |
566 | 566 | ||
567 | /* | 567 | /* |
568 | * Return 1 if a given transaction has not yet sent barrier request | ||
569 | * connected with a transaction commit. If 0 is returned, transaction | ||
570 | * may or may not have sent the barrier. Used to avoid sending barrier | ||
571 | * twice in common cases. | ||
572 | */ | ||
573 | int journal_trans_will_send_data_barrier(journal_t *journal, tid_t tid) | ||
574 | { | ||
575 | int ret = 0; | ||
576 | transaction_t *commit_trans; | ||
577 | |||
578 | if (!(journal->j_flags & JFS_BARRIER)) | ||
579 | return 0; | ||
580 | spin_lock(&journal->j_state_lock); | ||
581 | /* Transaction already committed? */ | ||
582 | if (tid_geq(journal->j_commit_sequence, tid)) | ||
583 | goto out; | ||
584 | /* | ||
585 | * Transaction is being committed and we already proceeded to | ||
586 | * writing commit record? | ||
587 | */ | ||
588 | commit_trans = journal->j_committing_transaction; | ||
589 | if (commit_trans && commit_trans->t_tid == tid && | ||
590 | commit_trans->t_state >= T_COMMIT_RECORD) | ||
591 | goto out; | ||
592 | ret = 1; | ||
593 | out: | ||
594 | spin_unlock(&journal->j_state_lock); | ||
595 | return ret; | ||
596 | } | ||
597 | EXPORT_SYMBOL(journal_commit_will_send_barrier); | ||
598 | |||
599 | /* | ||
568 | * Log buffer allocation routines: | 600 | * Log buffer allocation routines: |
569 | */ | 601 | */ |
570 | 602 | ||
@@ -1157,6 +1189,7 @@ int journal_destroy(journal_t *journal) | |||
1157 | { | 1189 | { |
1158 | int err = 0; | 1190 | int err = 0; |
1159 | 1191 | ||
1192 | |||
1160 | /* Wait for the commit thread to wake up and die. */ | 1193 | /* Wait for the commit thread to wake up and die. */ |
1161 | journal_kill_thread(journal); | 1194 | journal_kill_thread(journal); |
1162 | 1195 | ||