• Home
  • Raw
  • Download

Lines Matching refs:journal

149 	journal_t *journal = from_timer(journal, t, j_commit_timer);  in commit_timeout()  local
151 wake_up_process(journal->j_task); in commit_timeout()
174 journal_t *journal = arg; in kjournald2() local
181 timer_setup(&journal->j_commit_timer, commit_timeout, 0); in kjournald2()
186 journal->j_task = current; in kjournald2()
187 wake_up(&journal->j_wait_done_commit); in kjournald2()
200 write_lock(&journal->j_state_lock); in kjournald2()
203 if (journal->j_flags & JBD2_UNMOUNT) in kjournald2()
207 journal->j_commit_sequence, journal->j_commit_request); in kjournald2()
209 if (journal->j_commit_sequence != journal->j_commit_request) { in kjournald2()
211 write_unlock(&journal->j_state_lock); in kjournald2()
212 del_timer_sync(&journal->j_commit_timer); in kjournald2()
213 jbd2_journal_commit_transaction(journal); in kjournald2()
214 write_lock(&journal->j_state_lock); in kjournald2()
218 wake_up(&journal->j_wait_done_commit); in kjournald2()
226 write_unlock(&journal->j_state_lock); in kjournald2()
228 write_lock(&journal->j_state_lock); in kjournald2()
237 prepare_to_wait(&journal->j_wait_commit, &wait, in kjournald2()
239 if (journal->j_commit_sequence != journal->j_commit_request) in kjournald2()
241 transaction = journal->j_running_transaction; in kjournald2()
245 if (journal->j_flags & JBD2_UNMOUNT) in kjournald2()
248 write_unlock(&journal->j_state_lock); in kjournald2()
250 write_lock(&journal->j_state_lock); in kjournald2()
252 finish_wait(&journal->j_wait_commit, &wait); in kjournald2()
260 transaction = journal->j_running_transaction; in kjournald2()
262 journal->j_commit_request = transaction->t_tid; in kjournald2()
268 del_timer_sync(&journal->j_commit_timer); in kjournald2()
269 journal->j_task = NULL; in kjournald2()
270 wake_up(&journal->j_wait_done_commit); in kjournald2()
272 write_unlock(&journal->j_state_lock); in kjournald2()
276 static int jbd2_journal_start_thread(journal_t *journal) in jbd2_journal_start_thread() argument
280 t = kthread_run(kjournald2, journal, "jbd2/%s", in jbd2_journal_start_thread()
281 journal->j_devname); in jbd2_journal_start_thread()
285 wait_event(journal->j_wait_done_commit, journal->j_task != NULL); in jbd2_journal_start_thread()
289 static void journal_kill_thread(journal_t *journal) in journal_kill_thread() argument
291 write_lock(&journal->j_state_lock); in journal_kill_thread()
292 journal->j_flags |= JBD2_UNMOUNT; in journal_kill_thread()
294 while (journal->j_task) { in journal_kill_thread()
295 write_unlock(&journal->j_state_lock); in journal_kill_thread()
296 wake_up(&journal->j_wait_commit); in journal_kill_thread()
297 wait_event(journal->j_wait_done_commit, journal->j_task == NULL); in journal_kill_thread()
298 write_lock(&journal->j_state_lock); in journal_kill_thread()
300 write_unlock(&journal->j_state_lock); in journal_kill_thread()
351 journal_t *journal = transaction->t_journal; in jbd2_journal_write_metadata_buffer() local
452 new_bh->b_bdev = journal->j_dev; in jbd2_journal_write_metadata_buffer()
466 spin_lock(&journal->j_list_lock); in jbd2_journal_write_metadata_buffer()
468 spin_unlock(&journal->j_list_lock); in jbd2_journal_write_metadata_buffer()
484 int __jbd2_log_start_commit(journal_t *journal, tid_t target) in __jbd2_log_start_commit() argument
487 if (journal->j_commit_request == target) in __jbd2_log_start_commit()
495 if (journal->j_running_transaction && in __jbd2_log_start_commit()
496 journal->j_running_transaction->t_tid == target) { in __jbd2_log_start_commit()
502 journal->j_commit_request = target; in __jbd2_log_start_commit()
504 journal->j_commit_request, in __jbd2_log_start_commit()
505 journal->j_commit_sequence); in __jbd2_log_start_commit()
506 journal->j_running_transaction->t_requested = jiffies; in __jbd2_log_start_commit()
507 wake_up(&journal->j_wait_commit); in __jbd2_log_start_commit()
509 } else if (!tid_geq(journal->j_commit_request, target)) in __jbd2_log_start_commit()
514 journal->j_commit_request, in __jbd2_log_start_commit()
515 journal->j_commit_sequence, in __jbd2_log_start_commit()
516 target, journal->j_running_transaction ? in __jbd2_log_start_commit()
517 journal->j_running_transaction->t_tid : 0); in __jbd2_log_start_commit()
521 int jbd2_log_start_commit(journal_t *journal, tid_t tid) in jbd2_log_start_commit() argument
525 write_lock(&journal->j_state_lock); in jbd2_log_start_commit()
526 ret = __jbd2_log_start_commit(journal, tid); in jbd2_log_start_commit()
527 write_unlock(&journal->j_state_lock); in jbd2_log_start_commit()
538 static int __jbd2_journal_force_commit(journal_t *journal) in __jbd2_journal_force_commit() argument
544 read_lock(&journal->j_state_lock); in __jbd2_journal_force_commit()
545 if (journal->j_running_transaction && !current->journal_info) { in __jbd2_journal_force_commit()
546 transaction = journal->j_running_transaction; in __jbd2_journal_force_commit()
547 if (!tid_geq(journal->j_commit_request, transaction->t_tid)) in __jbd2_journal_force_commit()
549 } else if (journal->j_committing_transaction) in __jbd2_journal_force_commit()
550 transaction = journal->j_committing_transaction; in __jbd2_journal_force_commit()
554 read_unlock(&journal->j_state_lock); in __jbd2_journal_force_commit()
558 read_unlock(&journal->j_state_lock); in __jbd2_journal_force_commit()
560 jbd2_log_start_commit(journal, tid); in __jbd2_journal_force_commit()
561 ret = jbd2_log_wait_commit(journal, tid); in __jbd2_journal_force_commit()
578 int jbd2_journal_force_commit_nested(journal_t *journal) in jbd2_journal_force_commit_nested() argument
582 ret = __jbd2_journal_force_commit(journal); in jbd2_journal_force_commit_nested()
593 int jbd2_journal_force_commit(journal_t *journal) in jbd2_journal_force_commit() argument
598 ret = __jbd2_journal_force_commit(journal); in jbd2_journal_force_commit()
609 int jbd2_journal_start_commit(journal_t *journal, tid_t *ptid) in jbd2_journal_start_commit() argument
613 write_lock(&journal->j_state_lock); in jbd2_journal_start_commit()
614 if (journal->j_running_transaction) { in jbd2_journal_start_commit()
615 tid_t tid = journal->j_running_transaction->t_tid; in jbd2_journal_start_commit()
617 __jbd2_log_start_commit(journal, tid); in jbd2_journal_start_commit()
623 } else if (journal->j_committing_transaction) { in jbd2_journal_start_commit()
629 *ptid = journal->j_committing_transaction->t_tid; in jbd2_journal_start_commit()
632 write_unlock(&journal->j_state_lock); in jbd2_journal_start_commit()
642 int jbd2_trans_will_send_data_barrier(journal_t *journal, tid_t tid) in jbd2_trans_will_send_data_barrier() argument
647 if (!(journal->j_flags & JBD2_BARRIER)) in jbd2_trans_will_send_data_barrier()
649 read_lock(&journal->j_state_lock); in jbd2_trans_will_send_data_barrier()
651 if (tid_geq(journal->j_commit_sequence, tid)) in jbd2_trans_will_send_data_barrier()
653 commit_trans = journal->j_committing_transaction; in jbd2_trans_will_send_data_barrier()
662 if (journal->j_fs_dev != journal->j_dev) { in jbd2_trans_will_send_data_barrier()
672 read_unlock(&journal->j_state_lock); in jbd2_trans_will_send_data_barrier()
681 int jbd2_log_wait_commit(journal_t *journal, tid_t tid) in jbd2_log_wait_commit() argument
685 read_lock(&journal->j_state_lock); in jbd2_log_wait_commit()
692 if (tid_gt(tid, journal->j_commit_sequence) && in jbd2_log_wait_commit()
693 (!journal->j_committing_transaction || in jbd2_log_wait_commit()
694 journal->j_committing_transaction->t_tid != tid)) { in jbd2_log_wait_commit()
695 read_unlock(&journal->j_state_lock); in jbd2_log_wait_commit()
696 jbd2_might_wait_for_commit(journal); in jbd2_log_wait_commit()
697 read_lock(&journal->j_state_lock); in jbd2_log_wait_commit()
701 if (!tid_geq(journal->j_commit_request, tid)) { in jbd2_log_wait_commit()
704 __func__, journal->j_commit_request, tid); in jbd2_log_wait_commit()
707 while (tid_gt(tid, journal->j_commit_sequence)) { in jbd2_log_wait_commit()
709 tid, journal->j_commit_sequence); in jbd2_log_wait_commit()
710 read_unlock(&journal->j_state_lock); in jbd2_log_wait_commit()
711 wake_up(&journal->j_wait_commit); in jbd2_log_wait_commit()
712 wait_event(journal->j_wait_done_commit, in jbd2_log_wait_commit()
713 !tid_gt(tid, journal->j_commit_sequence)); in jbd2_log_wait_commit()
714 read_lock(&journal->j_state_lock); in jbd2_log_wait_commit()
716 read_unlock(&journal->j_state_lock); in jbd2_log_wait_commit()
718 if (unlikely(is_journal_aborted(journal))) in jbd2_log_wait_commit()
730 int jbd2_fc_begin_commit(journal_t *journal, tid_t tid) in jbd2_fc_begin_commit() argument
732 if (unlikely(is_journal_aborted(journal))) in jbd2_fc_begin_commit()
738 if (!journal->j_stats.ts_tid) in jbd2_fc_begin_commit()
741 write_lock(&journal->j_state_lock); in jbd2_fc_begin_commit()
742 if (tid <= journal->j_commit_sequence) { in jbd2_fc_begin_commit()
743 write_unlock(&journal->j_state_lock); in jbd2_fc_begin_commit()
747 if (journal->j_flags & JBD2_FULL_COMMIT_ONGOING || in jbd2_fc_begin_commit()
748 (journal->j_flags & JBD2_FAST_COMMIT_ONGOING)) { in jbd2_fc_begin_commit()
751 prepare_to_wait(&journal->j_fc_wait, &wait, in jbd2_fc_begin_commit()
753 write_unlock(&journal->j_state_lock); in jbd2_fc_begin_commit()
755 finish_wait(&journal->j_fc_wait, &wait); in jbd2_fc_begin_commit()
758 journal->j_flags |= JBD2_FAST_COMMIT_ONGOING; in jbd2_fc_begin_commit()
759 write_unlock(&journal->j_state_lock); in jbd2_fc_begin_commit()
760 jbd2_journal_lock_updates(journal); in jbd2_fc_begin_commit()
770 static int __jbd2_fc_end_commit(journal_t *journal, tid_t tid, bool fallback) in __jbd2_fc_end_commit() argument
772 jbd2_journal_unlock_updates(journal); in __jbd2_fc_end_commit()
773 if (journal->j_fc_cleanup_callback) in __jbd2_fc_end_commit()
774 journal->j_fc_cleanup_callback(journal, 0, tid); in __jbd2_fc_end_commit()
775 write_lock(&journal->j_state_lock); in __jbd2_fc_end_commit()
776 journal->j_flags &= ~JBD2_FAST_COMMIT_ONGOING; in __jbd2_fc_end_commit()
778 journal->j_flags |= JBD2_FULL_COMMIT_ONGOING; in __jbd2_fc_end_commit()
779 write_unlock(&journal->j_state_lock); in __jbd2_fc_end_commit()
780 wake_up(&journal->j_fc_wait); in __jbd2_fc_end_commit()
782 return jbd2_complete_transaction(journal, tid); in __jbd2_fc_end_commit()
786 int jbd2_fc_end_commit(journal_t *journal) in jbd2_fc_end_commit() argument
788 return __jbd2_fc_end_commit(journal, 0, false); in jbd2_fc_end_commit()
792 int jbd2_fc_end_commit_fallback(journal_t *journal) in jbd2_fc_end_commit_fallback() argument
796 read_lock(&journal->j_state_lock); in jbd2_fc_end_commit_fallback()
797 tid = journal->j_running_transaction ? in jbd2_fc_end_commit_fallback()
798 journal->j_running_transaction->t_tid : 0; in jbd2_fc_end_commit_fallback()
799 read_unlock(&journal->j_state_lock); in jbd2_fc_end_commit_fallback()
800 return __jbd2_fc_end_commit(journal, tid, true); in jbd2_fc_end_commit_fallback()
805 int jbd2_transaction_committed(journal_t *journal, tid_t tid) in jbd2_transaction_committed() argument
809 read_lock(&journal->j_state_lock); in jbd2_transaction_committed()
810 if (journal->j_running_transaction && in jbd2_transaction_committed()
811 journal->j_running_transaction->t_tid == tid) in jbd2_transaction_committed()
813 if (journal->j_committing_transaction && in jbd2_transaction_committed()
814 journal->j_committing_transaction->t_tid == tid) in jbd2_transaction_committed()
816 read_unlock(&journal->j_state_lock); in jbd2_transaction_committed()
828 int jbd2_complete_transaction(journal_t *journal, tid_t tid) in jbd2_complete_transaction() argument
832 read_lock(&journal->j_state_lock); in jbd2_complete_transaction()
833 if (journal->j_running_transaction && in jbd2_complete_transaction()
834 journal->j_running_transaction->t_tid == tid) { in jbd2_complete_transaction()
835 if (journal->j_commit_request != tid) { in jbd2_complete_transaction()
837 read_unlock(&journal->j_state_lock); in jbd2_complete_transaction()
838 jbd2_log_start_commit(journal, tid); in jbd2_complete_transaction()
841 } else if (!(journal->j_committing_transaction && in jbd2_complete_transaction()
842 journal->j_committing_transaction->t_tid == tid)) in jbd2_complete_transaction()
844 read_unlock(&journal->j_state_lock); in jbd2_complete_transaction()
848 return jbd2_log_wait_commit(journal, tid); in jbd2_complete_transaction()
856 int jbd2_journal_next_log_block(journal_t *journal, unsigned long long *retp) in jbd2_journal_next_log_block() argument
860 write_lock(&journal->j_state_lock); in jbd2_journal_next_log_block()
861 J_ASSERT(journal->j_free > 1); in jbd2_journal_next_log_block()
863 blocknr = journal->j_head; in jbd2_journal_next_log_block()
864 journal->j_head++; in jbd2_journal_next_log_block()
865 journal->j_free--; in jbd2_journal_next_log_block()
866 if (journal->j_head == journal->j_last) in jbd2_journal_next_log_block()
867 journal->j_head = journal->j_first; in jbd2_journal_next_log_block()
868 write_unlock(&journal->j_state_lock); in jbd2_journal_next_log_block()
869 return jbd2_journal_bmap(journal, blocknr, retp); in jbd2_journal_next_log_block()
873 int jbd2_fc_get_buf(journal_t *journal, struct buffer_head **bh_out) in jbd2_fc_get_buf() argument
883 if (journal->j_fc_off + journal->j_fc_first < journal->j_fc_last) { in jbd2_fc_get_buf()
884 fc_off = journal->j_fc_off; in jbd2_fc_get_buf()
885 blocknr = journal->j_fc_first + fc_off; in jbd2_fc_get_buf()
886 journal->j_fc_off++; in jbd2_fc_get_buf()
894 ret = jbd2_journal_bmap(journal, blocknr, &pblock); in jbd2_fc_get_buf()
898 bh = __getblk(journal->j_dev, pblock, journal->j_blocksize); in jbd2_fc_get_buf()
903 journal->j_fc_wbuf[fc_off] = bh; in jbd2_fc_get_buf()
915 int jbd2_fc_wait_bufs(journal_t *journal, int num_blks) in jbd2_fc_wait_bufs() argument
920 j_fc_off = journal->j_fc_off; in jbd2_fc_wait_bufs()
927 bh = journal->j_fc_wbuf[i]; in jbd2_fc_wait_bufs()
934 journal->j_fc_off = i + 1; in jbd2_fc_wait_bufs()
938 journal->j_fc_wbuf[i] = NULL; in jbd2_fc_wait_bufs()
945 int jbd2_fc_release_bufs(journal_t *journal) in jbd2_fc_release_bufs() argument
950 j_fc_off = journal->j_fc_off; in jbd2_fc_release_bufs()
953 bh = journal->j_fc_wbuf[i]; in jbd2_fc_release_bufs()
957 journal->j_fc_wbuf[i] = NULL; in jbd2_fc_release_bufs()
971 int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr, in jbd2_journal_bmap() argument
978 if (journal->j_inode) { in jbd2_journal_bmap()
980 ret = bmap(journal->j_inode, &block); in jbd2_journal_bmap()
985 __func__, blocknr, journal->j_devname); in jbd2_journal_bmap()
987 jbd2_journal_abort(journal, err); in jbd2_journal_bmap()
1011 journal_t *journal = transaction->t_journal; in jbd2_journal_get_descriptor_buffer() local
1017 err = jbd2_journal_next_log_block(journal, &blocknr); in jbd2_journal_get_descriptor_buffer()
1022 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize); in jbd2_journal_get_descriptor_buffer()
1027 memset(bh->b_data, 0, journal->j_blocksize); in jbd2_journal_get_descriptor_buffer()
1063 int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid, in jbd2_journal_get_log_tail() argument
1069 read_lock(&journal->j_state_lock); in jbd2_journal_get_log_tail()
1070 spin_lock(&journal->j_list_lock); in jbd2_journal_get_log_tail()
1071 transaction = journal->j_checkpoint_transactions; in jbd2_journal_get_log_tail()
1075 } else if ((transaction = journal->j_committing_transaction) != NULL) { in jbd2_journal_get_log_tail()
1078 } else if ((transaction = journal->j_running_transaction) != NULL) { in jbd2_journal_get_log_tail()
1080 *block = journal->j_head; in jbd2_journal_get_log_tail()
1082 *tid = journal->j_transaction_sequence; in jbd2_journal_get_log_tail()
1083 *block = journal->j_head; in jbd2_journal_get_log_tail()
1085 ret = tid_gt(*tid, journal->j_tail_sequence); in jbd2_journal_get_log_tail()
1086 spin_unlock(&journal->j_list_lock); in jbd2_journal_get_log_tail()
1087 read_unlock(&journal->j_state_lock); in jbd2_journal_get_log_tail()
1102 int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block) in __jbd2_update_log_tail() argument
1107 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in __jbd2_update_log_tail()
1115 ret = jbd2_journal_update_sb_log_tail(journal, tid, block, in __jbd2_update_log_tail()
1120 write_lock(&journal->j_state_lock); in __jbd2_update_log_tail()
1121 freed = block - journal->j_tail; in __jbd2_update_log_tail()
1122 if (block < journal->j_tail) in __jbd2_update_log_tail()
1123 freed += journal->j_last - journal->j_first; in __jbd2_update_log_tail()
1125 trace_jbd2_update_log_tail(journal, tid, block, freed); in __jbd2_update_log_tail()
1129 journal->j_tail_sequence, tid, block, freed); in __jbd2_update_log_tail()
1131 journal->j_free += freed; in __jbd2_update_log_tail()
1132 journal->j_tail_sequence = tid; in __jbd2_update_log_tail()
1133 journal->j_tail = block; in __jbd2_update_log_tail()
1134 write_unlock(&journal->j_state_lock); in __jbd2_update_log_tail()
1145 void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block) in jbd2_update_log_tail() argument
1147 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_update_log_tail()
1148 if (tid_gt(tid, journal->j_tail_sequence)) in jbd2_update_log_tail()
1149 __jbd2_update_log_tail(journal, tid, block); in jbd2_update_log_tail()
1150 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_update_log_tail()
1154 journal_t *journal; member
1180 s->journal->j_max_transaction_buffers); in jbd2_seq_info_show()
1198 div_u64(s->journal->j_average_commit_time, 1000)); in jbd2_seq_info_show()
1221 journal_t *journal = PDE_DATA(inode); in jbd2_seq_info_open() local
1234 spin_lock(&journal->j_history_lock); in jbd2_seq_info_open()
1235 memcpy(s->stats, &journal->j_stats, size); in jbd2_seq_info_open()
1236 s->journal = journal; in jbd2_seq_info_open()
1237 spin_unlock(&journal->j_history_lock); in jbd2_seq_info_open()
1269 static void jbd2_stats_proc_init(journal_t *journal) in jbd2_stats_proc_init() argument
1271 journal->j_proc_entry = proc_mkdir(journal->j_devname, proc_jbd2_stats); in jbd2_stats_proc_init()
1272 if (journal->j_proc_entry) { in jbd2_stats_proc_init()
1273 proc_create_data("info", S_IRUGO, journal->j_proc_entry, in jbd2_stats_proc_init()
1274 &jbd2_info_proc_ops, journal); in jbd2_stats_proc_init()
1278 static void jbd2_stats_proc_exit(journal_t *journal) in jbd2_stats_proc_exit() argument
1280 remove_proc_entry("info", journal->j_proc_entry); in jbd2_stats_proc_exit()
1281 remove_proc_entry(journal->j_devname, proc_jbd2_stats); in jbd2_stats_proc_exit()
1303 journal_t *journal = container_of(shrink, journal_t, j_shrinker); in jbd2_journal_shrink_scan() local
1308 count = percpu_counter_read_positive(&journal->j_checkpoint_jh_count); in jbd2_journal_shrink_scan()
1309 trace_jbd2_shrink_scan_enter(journal, sc->nr_to_scan, count); in jbd2_journal_shrink_scan()
1311 nr_shrunk = jbd2_journal_shrink_checkpoint_list(journal, &nr_to_scan); in jbd2_journal_shrink_scan()
1313 count = percpu_counter_read_positive(&journal->j_checkpoint_jh_count); in jbd2_journal_shrink_scan()
1314 trace_jbd2_shrink_scan_exit(journal, nr_to_scan, nr_shrunk, count); in jbd2_journal_shrink_scan()
1327 journal_t *journal = container_of(shrink, journal_t, j_shrinker); in jbd2_journal_shrink_count() local
1330 count = percpu_counter_read_positive(&journal->j_checkpoint_jh_count); in jbd2_journal_shrink_count()
1331 trace_jbd2_shrink_count(journal, sc->nr_to_scan, count); in jbd2_journal_shrink_count()
1350 journal_t *journal; in journal_init_common() local
1355 journal = kzalloc(sizeof(*journal), GFP_KERNEL); in journal_init_common()
1356 if (!journal) in journal_init_common()
1359 init_waitqueue_head(&journal->j_wait_transaction_locked); in journal_init_common()
1360 init_waitqueue_head(&journal->j_wait_done_commit); in journal_init_common()
1361 init_waitqueue_head(&journal->j_wait_commit); in journal_init_common()
1362 init_waitqueue_head(&journal->j_wait_updates); in journal_init_common()
1363 init_waitqueue_head(&journal->j_wait_reserved); in journal_init_common()
1364 init_waitqueue_head(&journal->j_fc_wait); in journal_init_common()
1365 mutex_init(&journal->j_abort_mutex); in journal_init_common()
1366 mutex_init(&journal->j_barrier); in journal_init_common()
1367 mutex_init(&journal->j_checkpoint_mutex); in journal_init_common()
1368 spin_lock_init(&journal->j_revoke_lock); in journal_init_common()
1369 spin_lock_init(&journal->j_list_lock); in journal_init_common()
1370 rwlock_init(&journal->j_state_lock); in journal_init_common()
1372 journal->j_commit_interval = (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE); in journal_init_common()
1373 journal->j_min_batch_time = 0; in journal_init_common()
1374 journal->j_max_batch_time = 15000; /* 15ms */ in journal_init_common()
1375 atomic_set(&journal->j_reserved_credits, 0); in journal_init_common()
1378 journal->j_flags = JBD2_ABORT; in journal_init_common()
1381 err = jbd2_journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH); in journal_init_common()
1385 spin_lock_init(&journal->j_history_lock); in journal_init_common()
1387 lockdep_init_map(&journal->j_trans_commit_map, "jbd2_handle", in journal_init_common()
1391 journal->j_blocksize = blocksize; in journal_init_common()
1392 journal->j_dev = bdev; in journal_init_common()
1393 journal->j_fs_dev = fs_dev; in journal_init_common()
1394 journal->j_blk_offset = start; in journal_init_common()
1395 journal->j_total_len = len; in journal_init_common()
1397 n = journal->j_blocksize / jbd2_min_tag_size(); in journal_init_common()
1398 journal->j_wbufsize = n; in journal_init_common()
1399 journal->j_fc_wbuf = NULL; in journal_init_common()
1400 journal->j_wbuf = kmalloc_array(n, sizeof(struct buffer_head *), in journal_init_common()
1402 if (!journal->j_wbuf) in journal_init_common()
1405 bh = getblk_unmovable(journal->j_dev, start, journal->j_blocksize); in journal_init_common()
1411 journal->j_sb_buffer = bh; in journal_init_common()
1412 journal->j_superblock = (journal_superblock_t *)bh->b_data; in journal_init_common()
1414 journal->j_shrink_transaction = NULL; in journal_init_common()
1415 journal->j_shrinker.scan_objects = jbd2_journal_shrink_scan; in journal_init_common()
1416 journal->j_shrinker.count_objects = jbd2_journal_shrink_count; in journal_init_common()
1417 journal->j_shrinker.seeks = DEFAULT_SEEKS; in journal_init_common()
1418 journal->j_shrinker.batch = journal->j_max_transaction_buffers; in journal_init_common()
1420 if (percpu_counter_init(&journal->j_checkpoint_jh_count, 0, GFP_KERNEL)) in journal_init_common()
1423 if (register_shrinker(&journal->j_shrinker)) { in journal_init_common()
1424 percpu_counter_destroy(&journal->j_checkpoint_jh_count); in journal_init_common()
1427 return journal; in journal_init_common()
1430 brelse(journal->j_sb_buffer); in journal_init_common()
1431 kfree(journal->j_wbuf); in journal_init_common()
1432 jbd2_journal_destroy_revoke(journal); in journal_init_common()
1433 kfree(journal); in journal_init_common()
1464 journal_t *journal; in jbd2_journal_init_dev() local
1466 journal = journal_init_common(bdev, fs_dev, start, len, blocksize); in jbd2_journal_init_dev()
1467 if (!journal) in jbd2_journal_init_dev()
1470 bdevname(journal->j_dev, journal->j_devname); in jbd2_journal_init_dev()
1471 strreplace(journal->j_devname, '/', '!'); in jbd2_journal_init_dev()
1472 jbd2_stats_proc_init(journal); in jbd2_journal_init_dev()
1474 return journal; in jbd2_journal_init_dev()
1487 journal_t *journal; in jbd2_journal_init_inode() local
1505 journal = journal_init_common(inode->i_sb->s_bdev, inode->i_sb->s_bdev, in jbd2_journal_init_inode()
1508 if (!journal) in jbd2_journal_init_inode()
1511 journal->j_inode = inode; in jbd2_journal_init_inode()
1512 bdevname(journal->j_dev, journal->j_devname); in jbd2_journal_init_inode()
1513 p = strreplace(journal->j_devname, '/', '!'); in jbd2_journal_init_inode()
1514 sprintf(p, "-%lu", journal->j_inode->i_ino); in jbd2_journal_init_inode()
1515 jbd2_stats_proc_init(journal); in jbd2_journal_init_inode()
1517 return journal; in jbd2_journal_init_inode()
1525 static void journal_fail_superblock(journal_t *journal) in journal_fail_superblock() argument
1527 struct buffer_head *bh = journal->j_sb_buffer; in journal_fail_superblock()
1529 journal->j_sb_buffer = NULL; in journal_fail_superblock()
1539 static int journal_reset(journal_t *journal) in journal_reset() argument
1541 journal_superblock_t *sb = journal->j_superblock; in journal_reset()
1549 journal_fail_superblock(journal); in journal_reset()
1553 journal->j_first = first; in journal_reset()
1554 journal->j_last = last; in journal_reset()
1556 journal->j_head = journal->j_first; in journal_reset()
1557 journal->j_tail = journal->j_first; in journal_reset()
1558 journal->j_free = journal->j_last - journal->j_first; in journal_reset()
1560 journal->j_tail_sequence = journal->j_transaction_sequence; in journal_reset()
1561 journal->j_commit_sequence = journal->j_transaction_sequence - 1; in journal_reset()
1562 journal->j_commit_request = journal->j_commit_sequence; in journal_reset()
1564 journal->j_max_transaction_buffers = jbd2_journal_get_max_txn_bufs(journal); in journal_reset()
1571 jbd2_clear_feature_fast_commit(journal); in journal_reset()
1582 journal->j_tail, journal->j_tail_sequence, in journal_reset()
1583 journal->j_errno); in journal_reset()
1584 journal->j_flags |= JBD2_FLUSHED; in journal_reset()
1587 mutex_lock_io(&journal->j_checkpoint_mutex); in journal_reset()
1594 jbd2_journal_update_sb_log_tail(journal, in journal_reset()
1595 journal->j_tail_sequence, in journal_reset()
1596 journal->j_tail, in journal_reset()
1598 mutex_unlock(&journal->j_checkpoint_mutex); in journal_reset()
1600 return jbd2_journal_start_thread(journal); in journal_reset()
1607 static int jbd2_write_superblock(journal_t *journal, int write_flags) in jbd2_write_superblock() argument
1609 struct buffer_head *bh = journal->j_sb_buffer; in jbd2_write_superblock()
1610 journal_superblock_t *sb = journal->j_superblock; in jbd2_write_superblock()
1619 if (!(journal->j_flags & JBD2_BARRIER)) in jbd2_write_superblock()
1622 trace_jbd2_write_superblock(journal, write_flags); in jbd2_write_superblock()
1635 journal->j_devname); in jbd2_write_superblock()
1639 if (jbd2_journal_has_csum_v2or3(journal)) in jbd2_write_superblock()
1640 sb->s_checksum = jbd2_superblock_csum(journal, sb); in jbd2_write_superblock()
1653 journal->j_devname); in jbd2_write_superblock()
1654 if (!is_journal_aborted(journal)) in jbd2_write_superblock()
1655 jbd2_journal_abort(journal, ret); in jbd2_write_superblock()
1671 int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid, in jbd2_journal_update_sb_log_tail() argument
1674 journal_superblock_t *sb = journal->j_superblock; in jbd2_journal_update_sb_log_tail()
1677 if (is_journal_aborted(journal)) in jbd2_journal_update_sb_log_tail()
1679 if (test_bit(JBD2_CHECKPOINT_IO_ERROR, &journal->j_atomic_flags)) { in jbd2_journal_update_sb_log_tail()
1680 jbd2_journal_abort(journal, -EIO); in jbd2_journal_update_sb_log_tail()
1684 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in jbd2_journal_update_sb_log_tail()
1688 lock_buffer(journal->j_sb_buffer); in jbd2_journal_update_sb_log_tail()
1692 ret = jbd2_write_superblock(journal, write_op); in jbd2_journal_update_sb_log_tail()
1697 write_lock(&journal->j_state_lock); in jbd2_journal_update_sb_log_tail()
1699 journal->j_flags &= ~JBD2_FLUSHED; in jbd2_journal_update_sb_log_tail()
1700 write_unlock(&journal->j_state_lock); in jbd2_journal_update_sb_log_tail()
1714 static void jbd2_mark_journal_empty(journal_t *journal, int write_op) in jbd2_mark_journal_empty() argument
1716 journal_superblock_t *sb = journal->j_superblock; in jbd2_mark_journal_empty()
1719 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in jbd2_mark_journal_empty()
1720 lock_buffer(journal->j_sb_buffer); in jbd2_mark_journal_empty()
1722 unlock_buffer(journal->j_sb_buffer); in jbd2_mark_journal_empty()
1727 journal->j_tail_sequence); in jbd2_mark_journal_empty()
1729 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence); in jbd2_mark_journal_empty()
1731 if (jbd2_has_feature_fast_commit(journal)) { in jbd2_mark_journal_empty()
1736 jbd2_clear_feature_fast_commit(journal); in jbd2_mark_journal_empty()
1740 jbd2_write_superblock(journal, write_op); in jbd2_mark_journal_empty()
1743 jbd2_set_feature_fast_commit(journal); in jbd2_mark_journal_empty()
1746 write_lock(&journal->j_state_lock); in jbd2_mark_journal_empty()
1747 journal->j_flags |= JBD2_FLUSHED; in jbd2_mark_journal_empty()
1748 write_unlock(&journal->j_state_lock); in jbd2_mark_journal_empty()
1763 static int __jbd2_journal_erase(journal_t *journal, unsigned int flags) in __jbd2_journal_erase() argument
1769 struct request_queue *q = bdev_get_queue(journal->j_dev); in __jbd2_journal_erase()
1787 log_offset = be32_to_cpu(journal->j_superblock->s_first); in __jbd2_journal_erase()
1789 for (block = log_offset; block < journal->j_total_len; block++) { in __jbd2_journal_erase()
1790 err = jbd2_journal_bmap(journal, block, &phys_block); in __jbd2_journal_erase()
1815 if (block != journal->j_total_len - 1) in __jbd2_journal_erase()
1823 byte_start = block_start * journal->j_blocksize; in __jbd2_journal_erase()
1824 byte_stop = block_stop * journal->j_blocksize; in __jbd2_journal_erase()
1826 journal->j_blocksize; in __jbd2_journal_erase()
1828 truncate_inode_pages_range(journal->j_dev->bd_inode->i_mapping, in __jbd2_journal_erase()
1832 err = blkdev_issue_discard(journal->j_dev, in __jbd2_journal_erase()
1837 err = blkdev_issue_zeroout(journal->j_dev, in __jbd2_journal_erase()
1853 return blkdev_issue_flush(journal->j_dev); in __jbd2_journal_erase()
1863 void jbd2_journal_update_sb_errno(journal_t *journal) in jbd2_journal_update_sb_errno() argument
1865 journal_superblock_t *sb = journal->j_superblock; in jbd2_journal_update_sb_errno()
1868 lock_buffer(journal->j_sb_buffer); in jbd2_journal_update_sb_errno()
1869 errcode = journal->j_errno; in jbd2_journal_update_sb_errno()
1875 jbd2_write_superblock(journal, REQ_SYNC | REQ_FUA); in jbd2_journal_update_sb_errno()
1879 static int journal_revoke_records_per_block(journal_t *journal) in journal_revoke_records_per_block() argument
1882 int space = journal->j_blocksize - sizeof(jbd2_journal_revoke_header_t); in journal_revoke_records_per_block()
1884 if (jbd2_has_feature_64bit(journal)) in journal_revoke_records_per_block()
1889 if (jbd2_journal_has_csum_v2or3(journal)) in journal_revoke_records_per_block()
1898 static int journal_get_superblock(journal_t *journal) in journal_get_superblock() argument
1904 bh = journal->j_sb_buffer; in journal_get_superblock()
1920 sb = journal->j_superblock; in journal_get_superblock()
1925 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) { in journal_get_superblock()
1932 journal->j_format_version = 1; in journal_get_superblock()
1935 journal->j_format_version = 2; in journal_get_superblock()
1942 if (be32_to_cpu(sb->s_maxlen) < journal->j_total_len) in journal_get_superblock()
1943 journal->j_total_len = be32_to_cpu(sb->s_maxlen); in journal_get_superblock()
1944 else if (be32_to_cpu(sb->s_maxlen) > journal->j_total_len) { in journal_get_superblock()
1950 be32_to_cpu(sb->s_first) >= journal->j_total_len) { in journal_get_superblock()
1957 if (jbd2_has_feature_csum2(journal) && in journal_get_superblock()
1958 jbd2_has_feature_csum3(journal)) { in journal_get_superblock()
1965 if (jbd2_journal_has_csum_v2or3_feature(journal) && in journal_get_superblock()
1966 jbd2_has_feature_checksum(journal)) { in journal_get_superblock()
1973 if (!jbd2_verify_csum_type(journal, sb)) { in journal_get_superblock()
1979 if (jbd2_journal_has_csum_v2or3_feature(journal)) { in journal_get_superblock()
1980 journal->j_chksum_driver = crypto_alloc_shash("crc32c", 0, 0); in journal_get_superblock()
1981 if (IS_ERR(journal->j_chksum_driver)) { in journal_get_superblock()
1983 err = PTR_ERR(journal->j_chksum_driver); in journal_get_superblock()
1984 journal->j_chksum_driver = NULL; in journal_get_superblock()
1989 if (jbd2_journal_has_csum_v2or3(journal)) { in journal_get_superblock()
1991 if (sb->s_checksum != jbd2_superblock_csum(journal, sb)) { in journal_get_superblock()
1998 journal->j_csum_seed = jbd2_chksum(journal, ~0, sb->s_uuid, in journal_get_superblock()
2002 journal->j_revoke_records_per_block = in journal_get_superblock()
2003 journal_revoke_records_per_block(journal); in journal_get_superblock()
2009 journal_fail_superblock(journal); in journal_get_superblock()
2018 static int load_superblock(journal_t *journal) in load_superblock() argument
2024 err = journal_get_superblock(journal); in load_superblock()
2028 sb = journal->j_superblock; in load_superblock()
2030 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence); in load_superblock()
2031 journal->j_tail = be32_to_cpu(sb->s_start); in load_superblock()
2032 journal->j_first = be32_to_cpu(sb->s_first); in load_superblock()
2033 journal->j_errno = be32_to_cpu(sb->s_errno); in load_superblock()
2034 journal->j_last = be32_to_cpu(sb->s_maxlen); in load_superblock()
2036 if (jbd2_has_feature_fast_commit(journal)) { in load_superblock()
2037 journal->j_fc_last = be32_to_cpu(sb->s_maxlen); in load_superblock()
2039 if (journal->j_last - num_fc_blocks >= JBD2_MIN_JOURNAL_BLOCKS) in load_superblock()
2040 journal->j_last = journal->j_fc_last - num_fc_blocks; in load_superblock()
2041 journal->j_fc_first = journal->j_last + 1; in load_superblock()
2042 journal->j_fc_off = 0; in load_superblock()
2057 int jbd2_journal_load(journal_t *journal) in jbd2_journal_load() argument
2062 err = load_superblock(journal); in jbd2_journal_load()
2066 sb = journal->j_superblock; in jbd2_journal_load()
2070 if (journal->j_format_version >= 2) { in jbd2_journal_load()
2090 if (jbd2_journal_recover(journal)) in jbd2_journal_load()
2093 if (journal->j_failed_commit) { in jbd2_journal_load()
2095 "is corrupt.\n", journal->j_failed_commit, in jbd2_journal_load()
2096 journal->j_devname); in jbd2_journal_load()
2103 journal->j_flags &= ~JBD2_ABORT; in jbd2_journal_load()
2108 if (journal_reset(journal)) in jbd2_journal_load()
2111 journal->j_flags |= JBD2_LOADED; in jbd2_journal_load()
2127 int jbd2_journal_destroy(journal_t *journal) in jbd2_journal_destroy() argument
2132 journal_kill_thread(journal); in jbd2_journal_destroy()
2135 if (journal->j_running_transaction) in jbd2_journal_destroy()
2136 jbd2_journal_commit_transaction(journal); in jbd2_journal_destroy()
2141 spin_lock(&journal->j_list_lock); in jbd2_journal_destroy()
2142 while (journal->j_checkpoint_transactions != NULL) { in jbd2_journal_destroy()
2143 spin_unlock(&journal->j_list_lock); in jbd2_journal_destroy()
2144 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_destroy()
2145 err = jbd2_log_do_checkpoint(journal); in jbd2_journal_destroy()
2146 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_destroy()
2152 jbd2_journal_destroy_checkpoint(journal); in jbd2_journal_destroy()
2153 spin_lock(&journal->j_list_lock); in jbd2_journal_destroy()
2156 spin_lock(&journal->j_list_lock); in jbd2_journal_destroy()
2159 J_ASSERT(journal->j_running_transaction == NULL); in jbd2_journal_destroy()
2160 J_ASSERT(journal->j_committing_transaction == NULL); in jbd2_journal_destroy()
2161 J_ASSERT(journal->j_checkpoint_transactions == NULL); in jbd2_journal_destroy()
2162 spin_unlock(&journal->j_list_lock); in jbd2_journal_destroy()
2170 if (!is_journal_aborted(journal) && in jbd2_journal_destroy()
2171 test_bit(JBD2_CHECKPOINT_IO_ERROR, &journal->j_atomic_flags)) in jbd2_journal_destroy()
2172 jbd2_journal_abort(journal, -EIO); in jbd2_journal_destroy()
2174 if (journal->j_sb_buffer) { in jbd2_journal_destroy()
2175 if (!is_journal_aborted(journal)) { in jbd2_journal_destroy()
2176 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_destroy()
2178 write_lock(&journal->j_state_lock); in jbd2_journal_destroy()
2179 journal->j_tail_sequence = in jbd2_journal_destroy()
2180 ++journal->j_transaction_sequence; in jbd2_journal_destroy()
2181 write_unlock(&journal->j_state_lock); in jbd2_journal_destroy()
2183 jbd2_mark_journal_empty(journal, in jbd2_journal_destroy()
2185 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_destroy()
2188 brelse(journal->j_sb_buffer); in jbd2_journal_destroy()
2191 if (journal->j_shrinker.flags & SHRINKER_REGISTERED) { in jbd2_journal_destroy()
2192 percpu_counter_destroy(&journal->j_checkpoint_jh_count); in jbd2_journal_destroy()
2193 unregister_shrinker(&journal->j_shrinker); in jbd2_journal_destroy()
2195 if (journal->j_proc_entry) in jbd2_journal_destroy()
2196 jbd2_stats_proc_exit(journal); in jbd2_journal_destroy()
2197 iput(journal->j_inode); in jbd2_journal_destroy()
2198 if (journal->j_revoke) in jbd2_journal_destroy()
2199 jbd2_journal_destroy_revoke(journal); in jbd2_journal_destroy()
2200 if (journal->j_chksum_driver) in jbd2_journal_destroy()
2201 crypto_free_shash(journal->j_chksum_driver); in jbd2_journal_destroy()
2202 kfree(journal->j_fc_wbuf); in jbd2_journal_destroy()
2203 kfree(journal->j_wbuf); in jbd2_journal_destroy()
2204 kfree(journal); in jbd2_journal_destroy()
2221 int jbd2_journal_check_used_features(journal_t *journal, unsigned long compat, in jbd2_journal_check_used_features() argument
2229 if (journal->j_format_version == 0 && in jbd2_journal_check_used_features()
2230 journal_get_superblock(journal) != 0) in jbd2_journal_check_used_features()
2232 if (journal->j_format_version == 1) in jbd2_journal_check_used_features()
2235 sb = journal->j_superblock; in jbd2_journal_check_used_features()
2256 int jbd2_journal_check_available_features(journal_t *journal, unsigned long compat, in jbd2_journal_check_available_features() argument
2266 if (journal->j_format_version != 2) in jbd2_journal_check_available_features()
2278 jbd2_journal_initialize_fast_commit(journal_t *journal) in jbd2_journal_initialize_fast_commit() argument
2280 journal_superblock_t *sb = journal->j_superblock; in jbd2_journal_initialize_fast_commit()
2284 if (journal->j_last - num_fc_blks < JBD2_MIN_JOURNAL_BLOCKS) in jbd2_journal_initialize_fast_commit()
2288 WARN_ON(journal->j_fc_wbuf != NULL); in jbd2_journal_initialize_fast_commit()
2289 journal->j_fc_wbuf = kmalloc_array(num_fc_blks, in jbd2_journal_initialize_fast_commit()
2291 if (!journal->j_fc_wbuf) in jbd2_journal_initialize_fast_commit()
2294 journal->j_fc_wbufsize = num_fc_blks; in jbd2_journal_initialize_fast_commit()
2295 journal->j_fc_last = journal->j_last; in jbd2_journal_initialize_fast_commit()
2296 journal->j_last = journal->j_fc_last - num_fc_blks; in jbd2_journal_initialize_fast_commit()
2297 journal->j_fc_first = journal->j_last + 1; in jbd2_journal_initialize_fast_commit()
2298 journal->j_fc_off = 0; in jbd2_journal_initialize_fast_commit()
2299 journal->j_free = journal->j_last - journal->j_first; in jbd2_journal_initialize_fast_commit()
2300 journal->j_max_transaction_buffers = in jbd2_journal_initialize_fast_commit()
2301 jbd2_journal_get_max_txn_bufs(journal); in jbd2_journal_initialize_fast_commit()
2318 int jbd2_journal_set_features(journal_t *journal, unsigned long compat, in jbd2_journal_set_features() argument
2327 if (jbd2_journal_check_used_features(journal, compat, ro, incompat)) in jbd2_journal_set_features()
2330 if (!jbd2_journal_check_available_features(journal, compat, ro, incompat)) in jbd2_journal_set_features()
2347 sb = journal->j_superblock; in jbd2_journal_set_features()
2350 if (jbd2_journal_initialize_fast_commit(journal)) { in jbd2_journal_set_features()
2357 if ((journal->j_chksum_driver == NULL) && in jbd2_journal_set_features()
2359 journal->j_chksum_driver = crypto_alloc_shash("crc32c", 0, 0); in jbd2_journal_set_features()
2360 if (IS_ERR(journal->j_chksum_driver)) { in jbd2_journal_set_features()
2362 journal->j_chksum_driver = NULL; in jbd2_journal_set_features()
2366 journal->j_csum_seed = jbd2_chksum(journal, ~0, sb->s_uuid, in jbd2_journal_set_features()
2370 lock_buffer(journal->j_sb_buffer); in jbd2_journal_set_features()
2388 unlock_buffer(journal->j_sb_buffer); in jbd2_journal_set_features()
2389 journal->j_revoke_records_per_block = in jbd2_journal_set_features()
2390 journal_revoke_records_per_block(journal); in jbd2_journal_set_features()
2408 void jbd2_journal_clear_features(journal_t *journal, unsigned long compat, in jbd2_journal_clear_features() argument
2416 sb = journal->j_superblock; in jbd2_journal_clear_features()
2421 journal->j_revoke_records_per_block = in jbd2_journal_clear_features()
2422 journal_revoke_records_per_block(journal); in jbd2_journal_clear_features()
2440 int jbd2_journal_flush(journal_t *journal, unsigned int flags) in jbd2_journal_flush() argument
2445 write_lock(&journal->j_state_lock); in jbd2_journal_flush()
2448 if (journal->j_running_transaction) { in jbd2_journal_flush()
2449 transaction = journal->j_running_transaction; in jbd2_journal_flush()
2450 __jbd2_log_start_commit(journal, transaction->t_tid); in jbd2_journal_flush()
2451 } else if (journal->j_committing_transaction) in jbd2_journal_flush()
2452 transaction = journal->j_committing_transaction; in jbd2_journal_flush()
2458 write_unlock(&journal->j_state_lock); in jbd2_journal_flush()
2459 jbd2_log_wait_commit(journal, tid); in jbd2_journal_flush()
2461 write_unlock(&journal->j_state_lock); in jbd2_journal_flush()
2465 spin_lock(&journal->j_list_lock); in jbd2_journal_flush()
2466 while (!err && journal->j_checkpoint_transactions != NULL) { in jbd2_journal_flush()
2467 spin_unlock(&journal->j_list_lock); in jbd2_journal_flush()
2468 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2469 err = jbd2_log_do_checkpoint(journal); in jbd2_journal_flush()
2470 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2471 spin_lock(&journal->j_list_lock); in jbd2_journal_flush()
2473 spin_unlock(&journal->j_list_lock); in jbd2_journal_flush()
2475 if (is_journal_aborted(journal)) in jbd2_journal_flush()
2478 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2480 err = jbd2_cleanup_journal_tail(journal); in jbd2_journal_flush()
2482 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2493 jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA); in jbd2_journal_flush()
2496 err = __jbd2_journal_erase(journal, flags); in jbd2_journal_flush()
2498 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2499 write_lock(&journal->j_state_lock); in jbd2_journal_flush()
2500 J_ASSERT(!journal->j_running_transaction); in jbd2_journal_flush()
2501 J_ASSERT(!journal->j_committing_transaction); in jbd2_journal_flush()
2502 J_ASSERT(!journal->j_checkpoint_transactions); in jbd2_journal_flush()
2503 J_ASSERT(journal->j_head == journal->j_tail); in jbd2_journal_flush()
2504 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence); in jbd2_journal_flush()
2505 write_unlock(&journal->j_state_lock); in jbd2_journal_flush()
2523 int jbd2_journal_wipe(journal_t *journal, int write) in jbd2_journal_wipe() argument
2527 J_ASSERT (!(journal->j_flags & JBD2_LOADED)); in jbd2_journal_wipe()
2529 err = load_superblock(journal); in jbd2_journal_wipe()
2533 if (!journal->j_tail) in jbd2_journal_wipe()
2539 err = jbd2_journal_skip_recovery(journal); in jbd2_journal_wipe()
2542 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_wipe()
2543 jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA); in jbd2_journal_wipe()
2544 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_wipe()
2592 void jbd2_journal_abort(journal_t *journal, int errno) in jbd2_journal_abort() argument
2602 mutex_lock(&journal->j_abort_mutex); in jbd2_journal_abort()
2608 write_lock(&journal->j_state_lock); in jbd2_journal_abort()
2609 if (journal->j_flags & JBD2_ABORT) { in jbd2_journal_abort()
2610 int old_errno = journal->j_errno; in jbd2_journal_abort()
2612 write_unlock(&journal->j_state_lock); in jbd2_journal_abort()
2614 journal->j_errno = errno; in jbd2_journal_abort()
2615 jbd2_journal_update_sb_errno(journal); in jbd2_journal_abort()
2617 mutex_unlock(&journal->j_abort_mutex); in jbd2_journal_abort()
2625 pr_err("Aborting journal on device %s.\n", journal->j_devname); in jbd2_journal_abort()
2627 journal->j_flags |= JBD2_ABORT; in jbd2_journal_abort()
2628 journal->j_errno = errno; in jbd2_journal_abort()
2629 transaction = journal->j_running_transaction; in jbd2_journal_abort()
2631 __jbd2_log_start_commit(journal, transaction->t_tid); in jbd2_journal_abort()
2632 write_unlock(&journal->j_state_lock); in jbd2_journal_abort()
2638 jbd2_journal_update_sb_errno(journal); in jbd2_journal_abort()
2639 mutex_unlock(&journal->j_abort_mutex); in jbd2_journal_abort()
2653 int jbd2_journal_errno(journal_t *journal) in jbd2_journal_errno() argument
2657 read_lock(&journal->j_state_lock); in jbd2_journal_errno()
2658 if (journal->j_flags & JBD2_ABORT) in jbd2_journal_errno()
2661 err = journal->j_errno; in jbd2_journal_errno()
2662 read_unlock(&journal->j_state_lock); in jbd2_journal_errno()
2673 int jbd2_journal_clear_err(journal_t *journal) in jbd2_journal_clear_err() argument
2677 write_lock(&journal->j_state_lock); in jbd2_journal_clear_err()
2678 if (journal->j_flags & JBD2_ABORT) in jbd2_journal_clear_err()
2681 journal->j_errno = 0; in jbd2_journal_clear_err()
2682 write_unlock(&journal->j_state_lock); in jbd2_journal_clear_err()
2693 void jbd2_journal_ack_err(journal_t *journal) in jbd2_journal_ack_err() argument
2695 write_lock(&journal->j_state_lock); in jbd2_journal_ack_err()
2696 if (journal->j_errno) in jbd2_journal_ack_err()
2697 journal->j_flags |= JBD2_ACK_ERR; in jbd2_journal_ack_err()
2698 write_unlock(&journal->j_state_lock); in jbd2_journal_ack_err()
2709 size_t journal_tag_bytes(journal_t *journal) in journal_tag_bytes() argument
2713 if (jbd2_has_feature_csum3(journal)) in journal_tag_bytes()
2718 if (jbd2_has_feature_csum2(journal)) in journal_tag_bytes()
2721 if (jbd2_has_feature_64bit(journal)) in journal_tag_bytes()
3057 void jbd2_journal_release_jbd_inode(journal_t *journal, in jbd2_journal_release_jbd_inode() argument
3060 if (!journal) in jbd2_journal_release_jbd_inode()
3063 spin_lock(&journal->j_list_lock); in jbd2_journal_release_jbd_inode()
3070 spin_unlock(&journal->j_list_lock); in jbd2_journal_release_jbd_inode()
3080 spin_unlock(&journal->j_list_lock); in jbd2_journal_release_jbd_inode()