Lines Matching refs:journal
119 static int journal_submit_commit_record(journal_t *journal, in journal_submit_commit_record() argument
131 if (is_journal_aborted(journal)) in journal_submit_commit_record()
134 bh = jbd2_journal_get_descriptor_buffer(journal); in journal_submit_commit_record()
145 if (JBD2_HAS_COMPAT_FEATURE(journal, in journal_submit_commit_record()
151 jbd2_commit_block_csum_set(journal, bh); in journal_submit_commit_record()
159 if (journal->j_flags & JBD2_BARRIER && in journal_submit_commit_record()
160 !JBD2_HAS_INCOMPAT_FEATURE(journal, in journal_submit_commit_record()
174 static int journal_wait_on_commit_record(journal_t *journal, in journal_wait_on_commit_record() argument
217 static int journal_submit_data_buffers(journal_t *journal, in journal_submit_data_buffers() argument
224 spin_lock(&journal->j_list_lock); in journal_submit_data_buffers()
228 spin_unlock(&journal->j_list_lock); in journal_submit_data_buffers()
239 spin_lock(&journal->j_list_lock); in journal_submit_data_buffers()
245 spin_unlock(&journal->j_list_lock); in journal_submit_data_buffers()
254 static int journal_finish_inode_data_buffers(journal_t *journal, in journal_finish_inode_data_buffers() argument
261 spin_lock(&journal->j_list_lock); in journal_finish_inode_data_buffers()
264 spin_unlock(&journal->j_list_lock); in journal_finish_inode_data_buffers()
278 spin_lock(&journal->j_list_lock); in journal_finish_inode_data_buffers()
297 spin_unlock(&journal->j_list_lock); in journal_finish_inode_data_buffers()
370 void jbd2_journal_commit_transaction(journal_t *journal) in jbd2_journal_commit_transaction() argument
376 struct buffer_head **wbuf = journal->j_wbuf; in jbd2_journal_commit_transaction()
390 int tag_bytes = journal_tag_bytes(journal); in jbd2_journal_commit_transaction()
402 if (jbd2_journal_has_csum_v2or3(journal)) in jbd2_journal_commit_transaction()
411 if (journal->j_flags & JBD2_FLUSHED) { in jbd2_journal_commit_transaction()
413 mutex_lock(&journal->j_checkpoint_mutex); in jbd2_journal_commit_transaction()
420 jbd2_journal_update_sb_log_tail(journal, in jbd2_journal_commit_transaction()
421 journal->j_tail_sequence, in jbd2_journal_commit_transaction()
422 journal->j_tail, in jbd2_journal_commit_transaction()
424 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_commit_transaction()
429 J_ASSERT(journal->j_running_transaction != NULL); in jbd2_journal_commit_transaction()
430 J_ASSERT(journal->j_committing_transaction == NULL); in jbd2_journal_commit_transaction()
432 commit_transaction = journal->j_running_transaction; in jbd2_journal_commit_transaction()
434 trace_jbd2_start_commit(journal, commit_transaction); in jbd2_journal_commit_transaction()
438 write_lock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
442 trace_jbd2_commit_locking(journal, commit_transaction); in jbd2_journal_commit_transaction()
457 prepare_to_wait(&journal->j_wait_updates, &wait, in jbd2_journal_commit_transaction()
461 write_unlock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
463 write_lock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
466 finish_wait(&journal->j_wait_updates, &wait); in jbd2_journal_commit_transaction()
471 journal->j_max_transaction_buffers); in jbd2_journal_commit_transaction()
504 jbd2_journal_refile_buffer(journal, jh); in jbd2_journal_commit_transaction()
512 spin_lock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
513 __jbd2_journal_clean_checkpoint_list(journal, false); in jbd2_journal_commit_transaction()
514 spin_unlock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
522 jbd2_clear_buffer_revoked_flags(journal); in jbd2_journal_commit_transaction()
527 jbd2_journal_switch_revoke_table(journal); in jbd2_journal_commit_transaction()
532 atomic_sub(atomic_read(&journal->j_reserved_credits), in jbd2_journal_commit_transaction()
535 trace_jbd2_commit_flushing(journal, commit_transaction); in jbd2_journal_commit_transaction()
541 journal->j_committing_transaction = commit_transaction; in jbd2_journal_commit_transaction()
542 journal->j_running_transaction = NULL; in jbd2_journal_commit_transaction()
544 commit_transaction->t_log_start = journal->j_head; in jbd2_journal_commit_transaction()
545 wake_up(&journal->j_wait_transaction_locked); in jbd2_journal_commit_transaction()
546 write_unlock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
554 err = journal_submit_data_buffers(journal, commit_transaction); in jbd2_journal_commit_transaction()
556 jbd2_journal_abort(journal, err); in jbd2_journal_commit_transaction()
559 jbd2_journal_write_revoke_records(journal, commit_transaction, in jbd2_journal_commit_transaction()
569 write_lock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
571 write_unlock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
573 trace_jbd2_commit_logging(journal, commit_transaction); in jbd2_journal_commit_transaction()
596 if (is_journal_aborted(journal)) { in jbd2_journal_commit_transaction()
603 jbd2_journal_refile_buffer(journal, jh); in jbd2_journal_commit_transaction()
621 descriptor = jbd2_journal_get_descriptor_buffer(journal); in jbd2_journal_commit_transaction()
623 jbd2_journal_abort(journal, -EIO); in jbd2_journal_commit_transaction()
651 err = jbd2_journal_next_log_block(journal, &blocknr); in jbd2_journal_commit_transaction()
656 jbd2_journal_abort(journal, err); in jbd2_journal_commit_transaction()
681 jbd2_journal_abort(journal, flags); in jbd2_journal_commit_transaction()
696 write_tag_block(journal, tag, jh2bh(jh)->b_blocknr); in jbd2_journal_commit_transaction()
698 jbd2_block_tag_csum_set(journal, tag, wbuf[bufs], in jbd2_journal_commit_transaction()
705 memcpy (tagp, journal->j_uuid, 16); in jbd2_journal_commit_transaction()
714 if (bufs == journal->j_wbufsize || in jbd2_journal_commit_transaction()
726 jbd2_descr_block_csum_set(journal, descriptor); in jbd2_journal_commit_transaction()
733 if (JBD2_HAS_COMPAT_FEATURE(journal, in jbd2_journal_commit_transaction()
755 err = journal_finish_inode_data_buffers(journal, commit_transaction); in jbd2_journal_commit_transaction()
759 "on %s\n", journal->j_devname); in jbd2_journal_commit_transaction()
760 if (journal->j_flags & JBD2_ABORT_ON_SYNCDATA_ERR) in jbd2_journal_commit_transaction()
761 jbd2_journal_abort(journal, err); in jbd2_journal_commit_transaction()
773 jbd2_journal_get_log_tail(journal, &first_tid, &first_block); in jbd2_journal_commit_transaction()
775 write_lock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
777 long freed = first_block - journal->j_tail; in jbd2_journal_commit_transaction()
779 if (first_block < journal->j_tail) in jbd2_journal_commit_transaction()
780 freed += journal->j_last - journal->j_first; in jbd2_journal_commit_transaction()
782 if (freed < journal->j_maxlen / 4) in jbd2_journal_commit_transaction()
787 write_unlock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
795 (journal->j_fs_dev != journal->j_dev) && in jbd2_journal_commit_transaction()
796 (journal->j_flags & JBD2_BARRIER)) in jbd2_journal_commit_transaction()
797 blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS, NULL); in jbd2_journal_commit_transaction()
800 if (JBD2_HAS_INCOMPAT_FEATURE(journal, in jbd2_journal_commit_transaction()
802 err = journal_submit_commit_record(journal, commit_transaction, in jbd2_journal_commit_transaction()
805 __jbd2_journal_abort_hard(journal); in jbd2_journal_commit_transaction()
884 jbd2_journal_abort(journal, err); in jbd2_journal_commit_transaction()
887 write_lock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
890 write_unlock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
892 if (!JBD2_HAS_INCOMPAT_FEATURE(journal, in jbd2_journal_commit_transaction()
894 err = journal_submit_commit_record(journal, commit_transaction, in jbd2_journal_commit_transaction()
897 __jbd2_journal_abort_hard(journal); in jbd2_journal_commit_transaction()
900 err = journal_wait_on_commit_record(journal, cbh); in jbd2_journal_commit_transaction()
901 if (JBD2_HAS_INCOMPAT_FEATURE(journal, in jbd2_journal_commit_transaction()
903 journal->j_flags & JBD2_BARRIER) { in jbd2_journal_commit_transaction()
904 blkdev_issue_flush(journal->j_dev, GFP_NOFS, NULL); in jbd2_journal_commit_transaction()
908 jbd2_journal_abort(journal, err); in jbd2_journal_commit_transaction()
916 jbd2_update_log_tail(journal, first_tid, first_block); in jbd2_journal_commit_transaction()
935 spin_lock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
942 spin_unlock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
979 spin_lock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
1027 if (is_journal_aborted(journal)) in jbd2_journal_commit_transaction()
1050 cond_resched_lock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
1052 spin_unlock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
1059 write_lock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
1060 spin_lock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
1066 spin_unlock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
1067 write_unlock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
1074 if (journal->j_checkpoint_transactions == NULL) { in jbd2_journal_commit_transaction()
1075 journal->j_checkpoint_transactions = commit_transaction; in jbd2_journal_commit_transaction()
1080 journal->j_checkpoint_transactions; in jbd2_journal_commit_transaction()
1088 spin_unlock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
1106 trace_jbd2_run_stats(journal->j_fs_dev->bd_dev, in jbd2_journal_commit_transaction()
1111 J_ASSERT(commit_transaction == journal->j_committing_transaction); in jbd2_journal_commit_transaction()
1112 journal->j_commit_sequence = commit_transaction->t_tid; in jbd2_journal_commit_transaction()
1113 journal->j_committing_transaction = NULL; in jbd2_journal_commit_transaction()
1120 if (likely(journal->j_average_commit_time)) in jbd2_journal_commit_transaction()
1121 journal->j_average_commit_time = (commit_time + in jbd2_journal_commit_transaction()
1122 journal->j_average_commit_time*3) / 4; in jbd2_journal_commit_transaction()
1124 journal->j_average_commit_time = commit_time; in jbd2_journal_commit_transaction()
1126 write_unlock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
1128 if (journal->j_commit_callback) in jbd2_journal_commit_transaction()
1129 journal->j_commit_callback(journal, commit_transaction); in jbd2_journal_commit_transaction()
1131 trace_jbd2_end_commit(journal, commit_transaction); in jbd2_journal_commit_transaction()
1133 journal->j_commit_sequence, journal->j_tail_sequence); in jbd2_journal_commit_transaction()
1135 write_lock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
1136 spin_lock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
1141 __jbd2_journal_drop_transaction(journal, commit_transaction); in jbd2_journal_commit_transaction()
1144 spin_unlock(&journal->j_list_lock); in jbd2_journal_commit_transaction()
1145 write_unlock(&journal->j_state_lock); in jbd2_journal_commit_transaction()
1146 wake_up(&journal->j_wait_done_commit); in jbd2_journal_commit_transaction()
1151 spin_lock(&journal->j_history_lock); in jbd2_journal_commit_transaction()
1152 journal->j_stats.ts_tid++; in jbd2_journal_commit_transaction()
1153 journal->j_stats.ts_requested += stats.ts_requested; in jbd2_journal_commit_transaction()
1154 journal->j_stats.run.rs_wait += stats.run.rs_wait; in jbd2_journal_commit_transaction()
1155 journal->j_stats.run.rs_request_delay += stats.run.rs_request_delay; in jbd2_journal_commit_transaction()
1156 journal->j_stats.run.rs_running += stats.run.rs_running; in jbd2_journal_commit_transaction()
1157 journal->j_stats.run.rs_locked += stats.run.rs_locked; in jbd2_journal_commit_transaction()
1158 journal->j_stats.run.rs_flushing += stats.run.rs_flushing; in jbd2_journal_commit_transaction()
1159 journal->j_stats.run.rs_logging += stats.run.rs_logging; in jbd2_journal_commit_transaction()
1160 journal->j_stats.run.rs_handle_count += stats.run.rs_handle_count; in jbd2_journal_commit_transaction()
1161 journal->j_stats.run.rs_blocks += stats.run.rs_blocks; in jbd2_journal_commit_transaction()
1162 journal->j_stats.run.rs_blocks_logged += stats.run.rs_blocks_logged; in jbd2_journal_commit_transaction()
1163 spin_unlock(&journal->j_history_lock); in jbd2_journal_commit_transaction()