Lines Matching refs:journal

108 void __jbd2_log_wait_for_space(journal_t *journal)  in __jbd2_log_wait_for_space()  argument
109 __acquires(&journal->j_state_lock) in __jbd2_log_wait_for_space()
110 __releases(&journal->j_state_lock) in __jbd2_log_wait_for_space()
115 nblocks = journal->j_max_transaction_buffers; in __jbd2_log_wait_for_space()
116 while (jbd2_log_space_left(journal) < nblocks) { in __jbd2_log_wait_for_space()
117 write_unlock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
118 mutex_lock_io(&journal->j_checkpoint_mutex); in __jbd2_log_wait_for_space()
131 write_lock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
132 if (journal->j_flags & JBD2_ABORT) { in __jbd2_log_wait_for_space()
133 mutex_unlock(&journal->j_checkpoint_mutex); in __jbd2_log_wait_for_space()
136 spin_lock(&journal->j_list_lock); in __jbd2_log_wait_for_space()
137 space_left = jbd2_log_space_left(journal); in __jbd2_log_wait_for_space()
139 int chkpt = journal->j_checkpoint_transactions != NULL; in __jbd2_log_wait_for_space()
142 if (journal->j_committing_transaction) in __jbd2_log_wait_for_space()
143 tid = journal->j_committing_transaction->t_tid; in __jbd2_log_wait_for_space()
144 spin_unlock(&journal->j_list_lock); in __jbd2_log_wait_for_space()
145 write_unlock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
147 jbd2_log_do_checkpoint(journal); in __jbd2_log_wait_for_space()
148 } else if (jbd2_cleanup_journal_tail(journal) == 0) { in __jbd2_log_wait_for_space()
157 mutex_unlock(&journal->j_checkpoint_mutex); in __jbd2_log_wait_for_space()
158 jbd2_log_wait_commit(journal, tid); in __jbd2_log_wait_for_space()
159 write_lock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
167 journal->j_devname); in __jbd2_log_wait_for_space()
169 jbd2_journal_abort(journal, -EIO); in __jbd2_log_wait_for_space()
171 write_lock(&journal->j_state_lock); in __jbd2_log_wait_for_space()
173 spin_unlock(&journal->j_list_lock); in __jbd2_log_wait_for_space()
175 mutex_unlock(&journal->j_checkpoint_mutex); in __jbd2_log_wait_for_space()
180 __flush_batch(journal_t *journal, int *batch_count) in __flush_batch() argument
187 write_dirty_buffer(journal->j_chkpt_bhs[i], REQ_SYNC); in __flush_batch()
191 struct buffer_head *bh = journal->j_chkpt_bhs[i]; in __flush_batch()
206 int jbd2_log_do_checkpoint(journal_t *journal) in jbd2_log_do_checkpoint() argument
221 result = jbd2_cleanup_journal_tail(journal); in jbd2_log_do_checkpoint()
222 trace_jbd2_checkpoint(journal, result); in jbd2_log_do_checkpoint()
232 spin_lock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
233 if (!journal->j_checkpoint_transactions) in jbd2_log_do_checkpoint()
235 transaction = journal->j_checkpoint_transactions; in jbd2_log_do_checkpoint()
245 if (journal->j_checkpoint_transactions != transaction || in jbd2_log_do_checkpoint()
256 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
268 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
269 if (unlikely(journal->j_flags & JBD2_UNMOUNT)) in jbd2_log_do_checkpoint()
278 journal->j_devname, (unsigned long long) bh->b_blocknr); in jbd2_log_do_checkpoint()
281 __flush_batch(journal, &batch_count); in jbd2_log_do_checkpoint()
282 jbd2_log_start_commit(journal, tid); in jbd2_log_do_checkpoint()
291 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_log_do_checkpoint()
292 jbd2_log_wait_commit(journal, tid); in jbd2_log_do_checkpoint()
293 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_log_do_checkpoint()
294 spin_lock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
317 journal->j_chkpt_bhs[batch_count++] = bh; in jbd2_log_do_checkpoint()
322 spin_needbreak(&journal->j_list_lock)) in jbd2_log_do_checkpoint()
328 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
331 __flush_batch(journal, &batch_count); in jbd2_log_do_checkpoint()
332 spin_lock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
342 if (journal->j_checkpoint_transactions != transaction || in jbd2_log_do_checkpoint()
351 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
356 spin_lock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
371 spin_unlock(&journal->j_list_lock); in jbd2_log_do_checkpoint()
373 jbd2_journal_abort(journal, result); in jbd2_log_do_checkpoint()
375 result = jbd2_cleanup_journal_tail(journal); in jbd2_log_do_checkpoint()
398 int jbd2_cleanup_journal_tail(journal_t *journal) in jbd2_cleanup_journal_tail() argument
403 if (is_journal_aborted(journal)) in jbd2_cleanup_journal_tail()
406 if (!jbd2_journal_get_log_tail(journal, &first_tid, &blocknr)) in jbd2_cleanup_journal_tail()
418 if (journal->j_flags & JBD2_BARRIER) in jbd2_cleanup_journal_tail()
419 blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS); in jbd2_cleanup_journal_tail()
421 return __jbd2_update_log_tail(journal, first_tid, blocknr); in jbd2_cleanup_journal_tail()
478 void __jbd2_journal_clean_checkpoint_list(journal_t *journal, bool destroy) in __jbd2_journal_clean_checkpoint_list() argument
483 transaction = journal->j_checkpoint_transactions; in __jbd2_journal_clean_checkpoint_list()
526 void jbd2_journal_destroy_checkpoint(journal_t *journal) in jbd2_journal_destroy_checkpoint() argument
533 spin_lock(&journal->j_list_lock); in jbd2_journal_destroy_checkpoint()
534 if (!journal->j_checkpoint_transactions) { in jbd2_journal_destroy_checkpoint()
535 spin_unlock(&journal->j_list_lock); in jbd2_journal_destroy_checkpoint()
538 __jbd2_journal_clean_checkpoint_list(journal, true); in jbd2_journal_destroy_checkpoint()
539 spin_unlock(&journal->j_list_lock); in jbd2_journal_destroy_checkpoint()
566 journal_t *journal; in __jbd2_journal_remove_checkpoint() local
575 journal = transaction->t_journal; in __jbd2_journal_remove_checkpoint()
604 trace_jbd2_checkpoint_stats(journal->j_fs_dev->bd_dev, in __jbd2_journal_remove_checkpoint()
607 __jbd2_journal_drop_transaction(journal, transaction); in __jbd2_journal_remove_checkpoint()
654 void __jbd2_journal_drop_transaction(journal_t *journal, transaction_t *transaction) in __jbd2_journal_drop_transaction() argument
656 assert_spin_locked(&journal->j_list_lock); in __jbd2_journal_drop_transaction()
660 if (journal->j_checkpoint_transactions == transaction) in __jbd2_journal_drop_transaction()
661 journal->j_checkpoint_transactions = in __jbd2_journal_drop_transaction()
663 if (journal->j_checkpoint_transactions == transaction) in __jbd2_journal_drop_transaction()
664 journal->j_checkpoint_transactions = NULL; in __jbd2_journal_drop_transaction()
674 J_ASSERT(journal->j_committing_transaction != transaction); in __jbd2_journal_drop_transaction()
675 J_ASSERT(journal->j_running_transaction != transaction); in __jbd2_journal_drop_transaction()
677 trace_jbd2_drop_transaction(journal, transaction); in __jbd2_journal_drop_transaction()