Lines Matching refs:journal

100 void __jbd2_log_wait_for_space(journal_t *journal)  in __jbd2_log_wait_for_space()  argument
101 __acquires(&journal->j_state_lock) in __jbd2_log_wait_for_space()
102 __releases(&journal->j_state_lock) in __jbd2_log_wait_for_space()
107 nblocks = journal->j_max_transaction_buffers; in __jbd2_log_wait_for_space()
108 while (jbd2_log_space_left(journal) < nblocks) { in __jbd2_log_wait_for_space()
109 write_unlock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
110 mutex_lock_io(&journal->j_checkpoint_mutex); in __jbd2_log_wait_for_space()
123 write_lock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
124 if (journal->j_flags & JBD2_ABORT) { in __jbd2_log_wait_for_space()
125 mutex_unlock(&journal->j_checkpoint_mutex); in __jbd2_log_wait_for_space()
128 spin_lock(&journal->j_list_lock); in __jbd2_log_wait_for_space()
129 space_left = jbd2_log_space_left(journal); in __jbd2_log_wait_for_space()
131 int chkpt = journal->j_checkpoint_transactions != NULL; in __jbd2_log_wait_for_space()
134 if (journal->j_committing_transaction) in __jbd2_log_wait_for_space()
135 tid = journal->j_committing_transaction->t_tid; in __jbd2_log_wait_for_space()
136 spin_unlock(&journal->j_list_lock); in __jbd2_log_wait_for_space()
137 write_unlock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
139 jbd2_log_do_checkpoint(journal); in __jbd2_log_wait_for_space()
140 } else if (jbd2_cleanup_journal_tail(journal) == 0) { in __jbd2_log_wait_for_space()
149 mutex_unlock(&journal->j_checkpoint_mutex); in __jbd2_log_wait_for_space()
150 jbd2_log_wait_commit(journal, tid); in __jbd2_log_wait_for_space()
151 write_lock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
159 journal->j_devname); in __jbd2_log_wait_for_space()
161 jbd2_journal_abort(journal, -EIO); in __jbd2_log_wait_for_space()
163 write_lock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
165 spin_unlock(&journal->j_list_lock); in __jbd2_log_wait_for_space()
167 mutex_unlock(&journal->j_checkpoint_mutex); in __jbd2_log_wait_for_space()
172 __flush_batch(journal_t *journal, int *batch_count) in __flush_batch() argument
179 write_dirty_buffer(journal->j_chkpt_bhs[i], REQ_SYNC); in __flush_batch()
183 struct buffer_head *bh = journal->j_chkpt_bhs[i]; in __flush_batch()
198 int jbd2_log_do_checkpoint(journal_t *journal) in jbd2_log_do_checkpoint() argument
213 result = jbd2_cleanup_journal_tail(journal); in jbd2_log_do_checkpoint()
214 trace_jbd2_checkpoint(journal, result); in jbd2_log_do_checkpoint()
223 spin_lock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
224 if (!journal->j_checkpoint_transactions) in jbd2_log_do_checkpoint()
226 transaction = journal->j_checkpoint_transactions; in jbd2_log_do_checkpoint()
236 if (journal->j_checkpoint_transactions != transaction || in jbd2_log_do_checkpoint()
247 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
259 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
260 if (unlikely(journal->j_flags & JBD2_UNMOUNT)) in jbd2_log_do_checkpoint()
269 journal->j_devname, (unsigned long long) bh->b_blocknr); in jbd2_log_do_checkpoint()
272 __flush_batch(journal, &batch_count); in jbd2_log_do_checkpoint()
273 jbd2_log_start_commit(journal, tid); in jbd2_log_do_checkpoint()
282 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_log_do_checkpoint()
283 jbd2_log_wait_commit(journal, tid); in jbd2_log_do_checkpoint()
284 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_log_do_checkpoint()
285 spin_lock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
306 journal->j_chkpt_bhs[batch_count++] = bh; in jbd2_log_do_checkpoint()
311 spin_needbreak(&journal->j_list_lock)) in jbd2_log_do_checkpoint()
317 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
320 __flush_batch(journal, &batch_count); in jbd2_log_do_checkpoint()
321 spin_lock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
331 if (journal->j_checkpoint_transactions != transaction || in jbd2_log_do_checkpoint()
340 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
345 spin_lock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
358 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
359 result = jbd2_cleanup_journal_tail(journal); in jbd2_log_do_checkpoint()
382 int jbd2_cleanup_journal_tail(journal_t *journal) in jbd2_cleanup_journal_tail() argument
387 if (is_journal_aborted(journal)) in jbd2_cleanup_journal_tail()
390 if (!jbd2_journal_get_log_tail(journal, &first_tid, &blocknr)) in jbd2_cleanup_journal_tail()
402 if (journal->j_flags & JBD2_BARRIER) in jbd2_cleanup_journal_tail()
403 blkdev_issue_flush(journal->j_fs_dev); in jbd2_cleanup_journal_tail()
405 return __jbd2_update_log_tail(journal, first_tid, blocknr); in jbd2_cleanup_journal_tail()
505 unsigned long jbd2_journal_shrink_checkpoint_list(journal_t *journal, in jbd2_journal_shrink_checkpoint_list() argument
516 spin_lock(&journal->j_list_lock); in jbd2_journal_shrink_checkpoint_list()
517 if (!journal->j_checkpoint_transactions) { in jbd2_journal_shrink_checkpoint_list()
518 spin_unlock(&journal->j_list_lock); in jbd2_journal_shrink_checkpoint_list()
528 if (journal->j_shrink_transaction) in jbd2_journal_shrink_checkpoint_list()
529 transaction = journal->j_shrink_transaction; in jbd2_journal_shrink_checkpoint_list()
531 transaction = journal->j_checkpoint_transactions; in jbd2_journal_shrink_checkpoint_list()
535 last_transaction = journal->j_checkpoint_transactions->t_cpprev; in jbd2_journal_shrink_checkpoint_list()
548 if (need_resched() || spin_needbreak(&journal->j_list_lock)) in jbd2_journal_shrink_checkpoint_list()
557 if (need_resched() || spin_needbreak(&journal->j_list_lock)) in jbd2_journal_shrink_checkpoint_list()
562 journal->j_shrink_transaction = next_transaction; in jbd2_journal_shrink_checkpoint_list()
565 journal->j_shrink_transaction = NULL; in jbd2_journal_shrink_checkpoint_list()
569 spin_unlock(&journal->j_list_lock); in jbd2_journal_shrink_checkpoint_list()
576 trace_jbd2_shrink_checkpoint_list(journal, first_tid, tid, last_tid, in jbd2_journal_shrink_checkpoint_list()
590 void __jbd2_journal_clean_checkpoint_list(journal_t *journal, bool destroy) in __jbd2_journal_clean_checkpoint_list() argument
595 transaction = journal->j_checkpoint_transactions; in __jbd2_journal_clean_checkpoint_list()
638 void jbd2_journal_destroy_checkpoint(journal_t *journal) in jbd2_journal_destroy_checkpoint() argument
645 spin_lock(&journal->j_list_lock); in jbd2_journal_destroy_checkpoint()
646 if (!journal->j_checkpoint_transactions) { in jbd2_journal_destroy_checkpoint()
647 spin_unlock(&journal->j_list_lock); in jbd2_journal_destroy_checkpoint()
650 __jbd2_journal_clean_checkpoint_list(journal, true); in jbd2_journal_destroy_checkpoint()
651 spin_unlock(&journal->j_list_lock); in jbd2_journal_destroy_checkpoint()
678 journal_t *journal; in __jbd2_journal_remove_checkpoint() local
688 journal = transaction->t_journal; in __jbd2_journal_remove_checkpoint()
700 set_bit(JBD2_CHECKPOINT_IO_ERROR, &journal->j_atomic_flags); in __jbd2_journal_remove_checkpoint()
704 percpu_counter_dec(&journal->j_checkpoint_jh_count); in __jbd2_journal_remove_checkpoint()
731 trace_jbd2_checkpoint_stats(journal->j_fs_dev->bd_dev, in __jbd2_journal_remove_checkpoint()
734 __jbd2_journal_drop_transaction(journal, transaction); in __jbd2_journal_remove_checkpoint()
780 void __jbd2_journal_drop_transaction(journal_t *journal, transaction_t *transaction) in __jbd2_journal_drop_transaction() argument
782 assert_spin_locked(&journal->j_list_lock); in __jbd2_journal_drop_transaction()
784 journal->j_shrink_transaction = NULL; in __jbd2_journal_drop_transaction()
788 if (journal->j_checkpoint_transactions == transaction) in __jbd2_journal_drop_transaction()
789 journal->j_checkpoint_transactions = in __jbd2_journal_drop_transaction()
791 if (journal->j_checkpoint_transactions == transaction) in __jbd2_journal_drop_transaction()
792 journal->j_checkpoint_transactions = NULL; in __jbd2_journal_drop_transaction()
802 J_ASSERT(journal->j_committing_transaction != transaction); in __jbd2_journal_drop_transaction()
803 J_ASSERT(journal->j_running_transaction != transaction); in __jbd2_journal_drop_transaction()
805 trace_jbd2_drop_transaction(journal, transaction); in __jbd2_journal_drop_transaction()