• Home
  • Raw
  • Download

Lines Matching refs:journal

122 void __log_wait_for_space(journal_t *journal)  in __log_wait_for_space()  argument
125 assert_spin_locked(&journal->j_state_lock); in __log_wait_for_space()
127 nblocks = jbd_space_needed(journal); in __log_wait_for_space()
128 while (__log_space_left(journal) < nblocks) { in __log_wait_for_space()
129 if (journal->j_flags & JFS_ABORT) in __log_wait_for_space()
131 spin_unlock(&journal->j_state_lock); in __log_wait_for_space()
132 mutex_lock(&journal->j_checkpoint_mutex); in __log_wait_for_space()
145 spin_lock(&journal->j_state_lock); in __log_wait_for_space()
146 spin_lock(&journal->j_list_lock); in __log_wait_for_space()
147 nblocks = jbd_space_needed(journal); in __log_wait_for_space()
148 space_left = __log_space_left(journal); in __log_wait_for_space()
150 int chkpt = journal->j_checkpoint_transactions != NULL; in __log_wait_for_space()
153 if (journal->j_committing_transaction) in __log_wait_for_space()
154 tid = journal->j_committing_transaction->t_tid; in __log_wait_for_space()
155 spin_unlock(&journal->j_list_lock); in __log_wait_for_space()
156 spin_unlock(&journal->j_state_lock); in __log_wait_for_space()
158 log_do_checkpoint(journal); in __log_wait_for_space()
159 } else if (cleanup_journal_tail(journal) == 0) { in __log_wait_for_space()
163 log_wait_commit(journal, tid); in __log_wait_for_space()
171 journal_abort(journal, 0); in __log_wait_for_space()
173 spin_lock(&journal->j_state_lock); in __log_wait_for_space()
175 spin_unlock(&journal->j_list_lock); in __log_wait_for_space()
177 mutex_unlock(&journal->j_checkpoint_mutex); in __log_wait_for_space()
186 static void jbd_sync_bh(journal_t *journal, struct buffer_head *bh) in jbd_sync_bh() argument
187 __releases(journal->j_list_lock) in jbd_sync_bh()
190 spin_unlock(&journal->j_list_lock); in jbd_sync_bh()
207 static int __wait_cp_io(journal_t *journal, transaction_t *transaction) in __wait_cp_io() argument
218 if (journal->j_checkpoint_transactions != transaction || in __wait_cp_io()
225 jbd_sync_bh(journal, bh); in __wait_cp_io()
226 spin_lock(&journal->j_list_lock); in __wait_cp_io()
231 spin_unlock(&journal->j_list_lock); in __wait_cp_io()
237 spin_lock(&journal->j_list_lock); in __wait_cp_io()
258 __flush_batch(journal_t *journal, struct buffer_head **bhs, int *batch_count) in __flush_batch() argument
287 static int __process_buffer(journal_t *journal, struct journal_head *jh, in __process_buffer() argument
295 spin_unlock(&journal->j_list_lock); in __process_buffer()
306 spin_unlock(&journal->j_list_lock); in __process_buffer()
308 log_start_commit(journal, tid); in __process_buffer()
309 log_wait_commit(journal, tid); in __process_buffer()
319 spin_unlock(&journal->j_list_lock); in __process_buffer()
339 spin_unlock(&journal->j_list_lock); in __process_buffer()
340 __flush_batch(journal, bhs, batch_count); in __process_buffer()
355 int log_do_checkpoint(journal_t *journal) in log_do_checkpoint() argument
368 result = cleanup_journal_tail(journal); in log_do_checkpoint()
369 trace_jbd_checkpoint(journal, result); in log_do_checkpoint()
379 spin_lock(&journal->j_list_lock); in log_do_checkpoint()
380 if (!journal->j_checkpoint_transactions) in log_do_checkpoint()
382 transaction = journal->j_checkpoint_transactions; in log_do_checkpoint()
390 if (journal->j_checkpoint_transactions == transaction && in log_do_checkpoint()
403 jbd_sync_bh(journal, bh); in log_do_checkpoint()
407 retry = __process_buffer(journal, jh, bhs,&batch_count); in log_do_checkpoint()
411 spin_needbreak(&journal->j_list_lock))) { in log_do_checkpoint()
412 spin_unlock(&journal->j_list_lock); in log_do_checkpoint()
420 spin_unlock(&journal->j_list_lock); in log_do_checkpoint()
423 __flush_batch(journal, bhs, &batch_count); in log_do_checkpoint()
427 spin_lock(&journal->j_list_lock); in log_do_checkpoint()
434 err = __wait_cp_io(journal, transaction); in log_do_checkpoint()
439 spin_unlock(&journal->j_list_lock); in log_do_checkpoint()
441 journal_abort(journal, result); in log_do_checkpoint()
443 result = cleanup_journal_tail(journal); in log_do_checkpoint()
464 int cleanup_journal_tail(journal_t *journal) in cleanup_journal_tail() argument
470 if (is_journal_aborted(journal)) in cleanup_journal_tail()
481 spin_lock(&journal->j_state_lock); in cleanup_journal_tail()
482 spin_lock(&journal->j_list_lock); in cleanup_journal_tail()
483 transaction = journal->j_checkpoint_transactions; in cleanup_journal_tail()
487 } else if ((transaction = journal->j_committing_transaction) != NULL) { in cleanup_journal_tail()
490 } else if ((transaction = journal->j_running_transaction) != NULL) { in cleanup_journal_tail()
492 blocknr = journal->j_head; in cleanup_journal_tail()
494 first_tid = journal->j_transaction_sequence; in cleanup_journal_tail()
495 blocknr = journal->j_head; in cleanup_journal_tail()
497 spin_unlock(&journal->j_list_lock); in cleanup_journal_tail()
502 if (journal->j_tail_sequence == first_tid) { in cleanup_journal_tail()
503 spin_unlock(&journal->j_state_lock); in cleanup_journal_tail()
506 spin_unlock(&journal->j_state_lock); in cleanup_journal_tail()
520 journal_update_sb_log_tail(journal, first_tid, blocknr, in cleanup_journal_tail()
523 spin_lock(&journal->j_state_lock); in cleanup_journal_tail()
527 freed = blocknr - journal->j_tail; in cleanup_journal_tail()
528 if (blocknr < journal->j_tail) in cleanup_journal_tail()
529 freed = freed + journal->j_last - journal->j_first; in cleanup_journal_tail()
531 trace_jbd_cleanup_journal_tail(journal, first_tid, blocknr, freed); in cleanup_journal_tail()
535 journal->j_tail_sequence, first_tid, blocknr, freed); in cleanup_journal_tail()
537 journal->j_free += freed; in cleanup_journal_tail()
538 journal->j_tail_sequence = first_tid; in cleanup_journal_tail()
539 journal->j_tail = blocknr; in cleanup_journal_tail()
540 spin_unlock(&journal->j_state_lock); in cleanup_journal_tail()
605 int __journal_clean_checkpoint_list(journal_t *journal) in __journal_clean_checkpoint_list() argument
611 transaction = journal->j_checkpoint_transactions; in __journal_clean_checkpoint_list()
668 journal_t *journal; in __journal_remove_checkpoint() local
677 journal = transaction->t_journal; in __journal_remove_checkpoint()
703 __journal_drop_transaction(journal, transaction); in __journal_remove_checkpoint()
707 wake_up(&journal->j_wait_logspace); in __journal_remove_checkpoint()
753 void __journal_drop_transaction(journal_t *journal, transaction_t *transaction) in __journal_drop_transaction() argument
755 assert_spin_locked(&journal->j_list_lock); in __journal_drop_transaction()
759 if (journal->j_checkpoint_transactions == transaction) in __journal_drop_transaction()
760 journal->j_checkpoint_transactions = in __journal_drop_transaction()
762 if (journal->j_checkpoint_transactions == transaction) in __journal_drop_transaction()
763 journal->j_checkpoint_transactions = NULL; in __journal_drop_transaction()
776 J_ASSERT(journal->j_committing_transaction != transaction); in __journal_drop_transaction()
777 J_ASSERT(journal->j_running_transaction != transaction); in __journal_drop_transaction()
779 trace_jbd_drop_transaction(journal, transaction); in __journal_drop_transaction()