Lines Matching refs:journal
102 static void __journal_abort_soft (journal_t *journal, int errno);
167 journal_t *journal = from_timer(journal, t, j_commit_timer); in commit_timeout() local
169 wake_up_process(journal->j_task); in commit_timeout()
190 journal_t *journal = arg; in kjournald2() local
197 timer_setup(&journal->j_commit_timer, commit_timeout, 0); in kjournald2()
202 journal->j_task = current; in kjournald2()
203 wake_up(&journal->j_wait_done_commit); in kjournald2()
216 write_lock(&journal->j_state_lock); in kjournald2()
219 if (journal->j_flags & JBD2_UNMOUNT) in kjournald2()
223 journal->j_commit_sequence, journal->j_commit_request); in kjournald2()
225 if (journal->j_commit_sequence != journal->j_commit_request) { in kjournald2()
227 write_unlock(&journal->j_state_lock); in kjournald2()
228 del_timer_sync(&journal->j_commit_timer); in kjournald2()
229 jbd2_journal_commit_transaction(journal); in kjournald2()
230 write_lock(&journal->j_state_lock); in kjournald2()
234 wake_up(&journal->j_wait_done_commit); in kjournald2()
242 write_unlock(&journal->j_state_lock); in kjournald2()
244 write_lock(&journal->j_state_lock); in kjournald2()
253 prepare_to_wait(&journal->j_wait_commit, &wait, in kjournald2()
255 if (journal->j_commit_sequence != journal->j_commit_request) in kjournald2()
257 transaction = journal->j_running_transaction; in kjournald2()
261 if (journal->j_flags & JBD2_UNMOUNT) in kjournald2()
264 write_unlock(&journal->j_state_lock); in kjournald2()
266 write_lock(&journal->j_state_lock); in kjournald2()
268 finish_wait(&journal->j_wait_commit, &wait); in kjournald2()
276 transaction = journal->j_running_transaction; in kjournald2()
278 journal->j_commit_request = transaction->t_tid; in kjournald2()
284 del_timer_sync(&journal->j_commit_timer); in kjournald2()
285 journal->j_task = NULL; in kjournald2()
286 wake_up(&journal->j_wait_done_commit); in kjournald2()
288 write_unlock(&journal->j_state_lock); in kjournald2()
292 static int jbd2_journal_start_thread(journal_t *journal) in jbd2_journal_start_thread() argument
296 t = kthread_run(kjournald2, journal, "jbd2/%s", in jbd2_journal_start_thread()
297 journal->j_devname); in jbd2_journal_start_thread()
301 wait_event(journal->j_wait_done_commit, journal->j_task != NULL); in jbd2_journal_start_thread()
305 static void journal_kill_thread(journal_t *journal) in journal_kill_thread() argument
307 write_lock(&journal->j_state_lock); in journal_kill_thread()
308 journal->j_flags |= JBD2_UNMOUNT; in journal_kill_thread()
310 while (journal->j_task) { in journal_kill_thread()
311 write_unlock(&journal->j_state_lock); in journal_kill_thread()
312 wake_up(&journal->j_wait_commit); in journal_kill_thread()
313 wait_event(journal->j_wait_done_commit, journal->j_task == NULL); in journal_kill_thread()
314 write_lock(&journal->j_state_lock); in journal_kill_thread()
316 write_unlock(&journal->j_state_lock); in journal_kill_thread()
367 journal_t *journal = transaction->t_journal; in jbd2_journal_write_metadata_buffer() local
468 new_bh->b_bdev = journal->j_dev; in jbd2_journal_write_metadata_buffer()
482 spin_lock(&journal->j_list_lock); in jbd2_journal_write_metadata_buffer()
484 spin_unlock(&journal->j_list_lock); in jbd2_journal_write_metadata_buffer()
500 int __jbd2_log_start_commit(journal_t *journal, tid_t target) in __jbd2_log_start_commit() argument
503 if (journal->j_commit_request == target) in __jbd2_log_start_commit()
511 if (journal->j_running_transaction && in __jbd2_log_start_commit()
512 journal->j_running_transaction->t_tid == target) { in __jbd2_log_start_commit()
518 journal->j_commit_request = target; in __jbd2_log_start_commit()
520 journal->j_commit_request, in __jbd2_log_start_commit()
521 journal->j_commit_sequence); in __jbd2_log_start_commit()
522 journal->j_running_transaction->t_requested = jiffies; in __jbd2_log_start_commit()
523 wake_up(&journal->j_wait_commit); in __jbd2_log_start_commit()
525 } else if (!tid_geq(journal->j_commit_request, target)) in __jbd2_log_start_commit()
530 journal->j_commit_request, in __jbd2_log_start_commit()
531 journal->j_commit_sequence, in __jbd2_log_start_commit()
532 target, journal->j_running_transaction ? in __jbd2_log_start_commit()
533 journal->j_running_transaction->t_tid : 0); in __jbd2_log_start_commit()
537 int jbd2_log_start_commit(journal_t *journal, tid_t tid) in jbd2_log_start_commit() argument
541 write_lock(&journal->j_state_lock); in jbd2_log_start_commit()
542 ret = __jbd2_log_start_commit(journal, tid); in jbd2_log_start_commit()
543 write_unlock(&journal->j_state_lock); in jbd2_log_start_commit()
554 static int __jbd2_journal_force_commit(journal_t *journal) in __jbd2_journal_force_commit() argument
560 read_lock(&journal->j_state_lock); in __jbd2_journal_force_commit()
561 if (journal->j_running_transaction && !current->journal_info) { in __jbd2_journal_force_commit()
562 transaction = journal->j_running_transaction; in __jbd2_journal_force_commit()
563 if (!tid_geq(journal->j_commit_request, transaction->t_tid)) in __jbd2_journal_force_commit()
565 } else if (journal->j_committing_transaction) in __jbd2_journal_force_commit()
566 transaction = journal->j_committing_transaction; in __jbd2_journal_force_commit()
570 read_unlock(&journal->j_state_lock); in __jbd2_journal_force_commit()
574 read_unlock(&journal->j_state_lock); in __jbd2_journal_force_commit()
576 jbd2_log_start_commit(journal, tid); in __jbd2_journal_force_commit()
577 ret = jbd2_log_wait_commit(journal, tid); in __jbd2_journal_force_commit()
592 int jbd2_journal_force_commit_nested(journal_t *journal) in jbd2_journal_force_commit_nested() argument
596 ret = __jbd2_journal_force_commit(journal); in jbd2_journal_force_commit_nested()
607 int jbd2_journal_force_commit(journal_t *journal) in jbd2_journal_force_commit() argument
612 ret = __jbd2_journal_force_commit(journal); in jbd2_journal_force_commit()
623 int jbd2_journal_start_commit(journal_t *journal, tid_t *ptid) in jbd2_journal_start_commit() argument
627 write_lock(&journal->j_state_lock); in jbd2_journal_start_commit()
628 if (journal->j_running_transaction) { in jbd2_journal_start_commit()
629 tid_t tid = journal->j_running_transaction->t_tid; in jbd2_journal_start_commit()
631 __jbd2_log_start_commit(journal, tid); in jbd2_journal_start_commit()
637 } else if (journal->j_committing_transaction) { in jbd2_journal_start_commit()
643 *ptid = journal->j_committing_transaction->t_tid; in jbd2_journal_start_commit()
646 write_unlock(&journal->j_state_lock); in jbd2_journal_start_commit()
656 int jbd2_trans_will_send_data_barrier(journal_t *journal, tid_t tid) in jbd2_trans_will_send_data_barrier() argument
661 if (!(journal->j_flags & JBD2_BARRIER)) in jbd2_trans_will_send_data_barrier()
663 read_lock(&journal->j_state_lock); in jbd2_trans_will_send_data_barrier()
665 if (tid_geq(journal->j_commit_sequence, tid)) in jbd2_trans_will_send_data_barrier()
667 commit_trans = journal->j_committing_transaction; in jbd2_trans_will_send_data_barrier()
676 if (journal->j_fs_dev != journal->j_dev) { in jbd2_trans_will_send_data_barrier()
686 read_unlock(&journal->j_state_lock); in jbd2_trans_will_send_data_barrier()
695 int jbd2_log_wait_commit(journal_t *journal, tid_t tid) in jbd2_log_wait_commit() argument
699 read_lock(&journal->j_state_lock); in jbd2_log_wait_commit()
706 if (tid_gt(tid, journal->j_commit_sequence) && in jbd2_log_wait_commit()
707 (!journal->j_committing_transaction || in jbd2_log_wait_commit()
708 journal->j_committing_transaction->t_tid != tid)) { in jbd2_log_wait_commit()
709 read_unlock(&journal->j_state_lock); in jbd2_log_wait_commit()
710 jbd2_might_wait_for_commit(journal); in jbd2_log_wait_commit()
711 read_lock(&journal->j_state_lock); in jbd2_log_wait_commit()
715 if (!tid_geq(journal->j_commit_request, tid)) { in jbd2_log_wait_commit()
718 __func__, journal->j_commit_request, tid); in jbd2_log_wait_commit()
721 while (tid_gt(tid, journal->j_commit_sequence)) { in jbd2_log_wait_commit()
723 tid, journal->j_commit_sequence); in jbd2_log_wait_commit()
724 read_unlock(&journal->j_state_lock); in jbd2_log_wait_commit()
725 wake_up(&journal->j_wait_commit); in jbd2_log_wait_commit()
726 wait_event(journal->j_wait_done_commit, in jbd2_log_wait_commit()
727 !tid_gt(tid, journal->j_commit_sequence)); in jbd2_log_wait_commit()
728 read_lock(&journal->j_state_lock); in jbd2_log_wait_commit()
730 read_unlock(&journal->j_state_lock); in jbd2_log_wait_commit()
732 if (unlikely(is_journal_aborted(journal))) in jbd2_log_wait_commit()
738 int jbd2_transaction_committed(journal_t *journal, tid_t tid) in jbd2_transaction_committed() argument
742 read_lock(&journal->j_state_lock); in jbd2_transaction_committed()
743 if (journal->j_running_transaction && in jbd2_transaction_committed()
744 journal->j_running_transaction->t_tid == tid) in jbd2_transaction_committed()
746 if (journal->j_committing_transaction && in jbd2_transaction_committed()
747 journal->j_committing_transaction->t_tid == tid) in jbd2_transaction_committed()
749 read_unlock(&journal->j_state_lock); in jbd2_transaction_committed()
761 int jbd2_complete_transaction(journal_t *journal, tid_t tid) in jbd2_complete_transaction() argument
765 read_lock(&journal->j_state_lock); in jbd2_complete_transaction()
766 if (journal->j_running_transaction && in jbd2_complete_transaction()
767 journal->j_running_transaction->t_tid == tid) { in jbd2_complete_transaction()
768 if (journal->j_commit_request != tid) { in jbd2_complete_transaction()
770 read_unlock(&journal->j_state_lock); in jbd2_complete_transaction()
771 jbd2_log_start_commit(journal, tid); in jbd2_complete_transaction()
774 } else if (!(journal->j_committing_transaction && in jbd2_complete_transaction()
775 journal->j_committing_transaction->t_tid == tid)) in jbd2_complete_transaction()
777 read_unlock(&journal->j_state_lock); in jbd2_complete_transaction()
781 return jbd2_log_wait_commit(journal, tid); in jbd2_complete_transaction()
789 int jbd2_journal_next_log_block(journal_t *journal, unsigned long long *retp) in jbd2_journal_next_log_block() argument
793 write_lock(&journal->j_state_lock); in jbd2_journal_next_log_block()
794 J_ASSERT(journal->j_free > 1); in jbd2_journal_next_log_block()
796 blocknr = journal->j_head; in jbd2_journal_next_log_block()
797 journal->j_head++; in jbd2_journal_next_log_block()
798 journal->j_free--; in jbd2_journal_next_log_block()
799 if (journal->j_head == journal->j_last) in jbd2_journal_next_log_block()
800 journal->j_head = journal->j_first; in jbd2_journal_next_log_block()
801 write_unlock(&journal->j_state_lock); in jbd2_journal_next_log_block()
802 return jbd2_journal_bmap(journal, blocknr, retp); in jbd2_journal_next_log_block()
812 int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr, in jbd2_journal_bmap() argument
818 if (journal->j_inode) { in jbd2_journal_bmap()
819 ret = bmap(journal->j_inode, blocknr); in jbd2_journal_bmap()
825 __func__, blocknr, journal->j_devname); in jbd2_journal_bmap()
827 __journal_abort_soft(journal, err); in jbd2_journal_bmap()
848 journal_t *journal = transaction->t_journal; in jbd2_journal_get_descriptor_buffer() local
854 err = jbd2_journal_next_log_block(journal, &blocknr); in jbd2_journal_get_descriptor_buffer()
859 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize); in jbd2_journal_get_descriptor_buffer()
863 memset(bh->b_data, 0, journal->j_blocksize); in jbd2_journal_get_descriptor_buffer()
899 int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid, in jbd2_journal_get_log_tail() argument
905 read_lock(&journal->j_state_lock); in jbd2_journal_get_log_tail()
906 spin_lock(&journal->j_list_lock); in jbd2_journal_get_log_tail()
907 transaction = journal->j_checkpoint_transactions; in jbd2_journal_get_log_tail()
911 } else if ((transaction = journal->j_committing_transaction) != NULL) { in jbd2_journal_get_log_tail()
914 } else if ((transaction = journal->j_running_transaction) != NULL) { in jbd2_journal_get_log_tail()
916 *block = journal->j_head; in jbd2_journal_get_log_tail()
918 *tid = journal->j_transaction_sequence; in jbd2_journal_get_log_tail()
919 *block = journal->j_head; in jbd2_journal_get_log_tail()
921 ret = tid_gt(*tid, journal->j_tail_sequence); in jbd2_journal_get_log_tail()
922 spin_unlock(&journal->j_list_lock); in jbd2_journal_get_log_tail()
923 read_unlock(&journal->j_state_lock); in jbd2_journal_get_log_tail()
938 int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block) in __jbd2_update_log_tail() argument
943 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in __jbd2_update_log_tail()
951 ret = jbd2_journal_update_sb_log_tail(journal, tid, block, in __jbd2_update_log_tail()
956 write_lock(&journal->j_state_lock); in __jbd2_update_log_tail()
957 freed = block - journal->j_tail; in __jbd2_update_log_tail()
958 if (block < journal->j_tail) in __jbd2_update_log_tail()
959 freed += journal->j_last - journal->j_first; in __jbd2_update_log_tail()
961 trace_jbd2_update_log_tail(journal, tid, block, freed); in __jbd2_update_log_tail()
965 journal->j_tail_sequence, tid, block, freed); in __jbd2_update_log_tail()
967 journal->j_free += freed; in __jbd2_update_log_tail()
968 journal->j_tail_sequence = tid; in __jbd2_update_log_tail()
969 journal->j_tail = block; in __jbd2_update_log_tail()
970 write_unlock(&journal->j_state_lock); in __jbd2_update_log_tail()
981 void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block) in jbd2_update_log_tail() argument
983 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_update_log_tail()
984 if (tid_gt(tid, journal->j_tail_sequence)) in jbd2_update_log_tail()
985 __jbd2_update_log_tail(journal, tid, block); in jbd2_update_log_tail()
986 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_update_log_tail()
990 journal_t *journal; member
1015 s->journal->j_max_transaction_buffers); in jbd2_seq_info_show()
1033 div_u64(s->journal->j_average_commit_time, 1000)); in jbd2_seq_info_show()
1056 journal_t *journal = PDE_DATA(inode); in jbd2_seq_info_open() local
1069 spin_lock(&journal->j_history_lock); in jbd2_seq_info_open()
1070 memcpy(s->stats, &journal->j_stats, size); in jbd2_seq_info_open()
1071 s->journal = journal; in jbd2_seq_info_open()
1072 spin_unlock(&journal->j_history_lock); in jbd2_seq_info_open()
1105 static void jbd2_stats_proc_init(journal_t *journal) in jbd2_stats_proc_init() argument
1107 journal->j_proc_entry = proc_mkdir(journal->j_devname, proc_jbd2_stats); in jbd2_stats_proc_init()
1108 if (journal->j_proc_entry) { in jbd2_stats_proc_init()
1109 proc_create_data("info", S_IRUGO, journal->j_proc_entry, in jbd2_stats_proc_init()
1110 &jbd2_seq_info_fops, journal); in jbd2_stats_proc_init()
1114 static void jbd2_stats_proc_exit(journal_t *journal) in jbd2_stats_proc_exit() argument
1116 remove_proc_entry("info", journal->j_proc_entry); in jbd2_stats_proc_exit()
1117 remove_proc_entry(journal->j_devname, proc_jbd2_stats); in jbd2_stats_proc_exit()
1134 journal_t *journal; in journal_init_common() local
1139 journal = kzalloc(sizeof(*journal), GFP_KERNEL); in journal_init_common()
1140 if (!journal) in journal_init_common()
1143 init_waitqueue_head(&journal->j_wait_transaction_locked); in journal_init_common()
1144 init_waitqueue_head(&journal->j_wait_done_commit); in journal_init_common()
1145 init_waitqueue_head(&journal->j_wait_commit); in journal_init_common()
1146 init_waitqueue_head(&journal->j_wait_updates); in journal_init_common()
1147 init_waitqueue_head(&journal->j_wait_reserved); in journal_init_common()
1148 mutex_init(&journal->j_barrier); in journal_init_common()
1149 mutex_init(&journal->j_checkpoint_mutex); in journal_init_common()
1150 spin_lock_init(&journal->j_revoke_lock); in journal_init_common()
1151 spin_lock_init(&journal->j_list_lock); in journal_init_common()
1152 rwlock_init(&journal->j_state_lock); in journal_init_common()
1154 journal->j_commit_interval = (HZ * JBD2_DEFAULT_MAX_COMMIT_AGE); in journal_init_common()
1155 journal->j_min_batch_time = 0; in journal_init_common()
1156 journal->j_max_batch_time = 15000; /* 15ms */ in journal_init_common()
1157 atomic_set(&journal->j_reserved_credits, 0); in journal_init_common()
1160 journal->j_flags = JBD2_ABORT; in journal_init_common()
1163 err = jbd2_journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH); in journal_init_common()
1167 spin_lock_init(&journal->j_history_lock); in journal_init_common()
1169 lockdep_init_map(&journal->j_trans_commit_map, "jbd2_handle", in journal_init_common()
1173 journal->j_blocksize = blocksize; in journal_init_common()
1174 journal->j_dev = bdev; in journal_init_common()
1175 journal->j_fs_dev = fs_dev; in journal_init_common()
1176 journal->j_blk_offset = start; in journal_init_common()
1177 journal->j_maxlen = len; in journal_init_common()
1178 n = journal->j_blocksize / sizeof(journal_block_tag_t); in journal_init_common()
1179 journal->j_wbufsize = n; in journal_init_common()
1180 journal->j_wbuf = kmalloc_array(n, sizeof(struct buffer_head *), in journal_init_common()
1182 if (!journal->j_wbuf) in journal_init_common()
1185 bh = getblk_unmovable(journal->j_dev, start, journal->j_blocksize); in journal_init_common()
1191 journal->j_sb_buffer = bh; in journal_init_common()
1192 journal->j_superblock = (journal_superblock_t *)bh->b_data; in journal_init_common()
1194 return journal; in journal_init_common()
1197 kfree(journal->j_wbuf); in journal_init_common()
1198 jbd2_journal_destroy_revoke(journal); in journal_init_common()
1199 kfree(journal); in journal_init_common()
1230 journal_t *journal; in jbd2_journal_init_dev() local
1232 journal = journal_init_common(bdev, fs_dev, start, len, blocksize); in jbd2_journal_init_dev()
1233 if (!journal) in jbd2_journal_init_dev()
1236 bdevname(journal->j_dev, journal->j_devname); in jbd2_journal_init_dev()
1237 strreplace(journal->j_devname, '/', '!'); in jbd2_journal_init_dev()
1238 jbd2_stats_proc_init(journal); in jbd2_journal_init_dev()
1240 return journal; in jbd2_journal_init_dev()
1253 journal_t *journal; in jbd2_journal_init_inode() local
1268 journal = journal_init_common(inode->i_sb->s_bdev, inode->i_sb->s_bdev, in jbd2_journal_init_inode()
1271 if (!journal) in jbd2_journal_init_inode()
1274 journal->j_inode = inode; in jbd2_journal_init_inode()
1275 bdevname(journal->j_dev, journal->j_devname); in jbd2_journal_init_inode()
1276 p = strreplace(journal->j_devname, '/', '!'); in jbd2_journal_init_inode()
1277 sprintf(p, "-%lu", journal->j_inode->i_ino); in jbd2_journal_init_inode()
1278 jbd2_stats_proc_init(journal); in jbd2_journal_init_inode()
1280 return journal; in jbd2_journal_init_inode()
1288 static void journal_fail_superblock (journal_t *journal) in journal_fail_superblock() argument
1290 struct buffer_head *bh = journal->j_sb_buffer; in journal_fail_superblock()
1292 journal->j_sb_buffer = NULL; in journal_fail_superblock()
1302 static int journal_reset(journal_t *journal) in journal_reset() argument
1304 journal_superblock_t *sb = journal->j_superblock; in journal_reset()
1312 journal_fail_superblock(journal); in journal_reset()
1316 journal->j_first = first; in journal_reset()
1317 journal->j_last = last; in journal_reset()
1319 journal->j_head = first; in journal_reset()
1320 journal->j_tail = first; in journal_reset()
1321 journal->j_free = last - first; in journal_reset()
1323 journal->j_tail_sequence = journal->j_transaction_sequence; in journal_reset()
1324 journal->j_commit_sequence = journal->j_transaction_sequence - 1; in journal_reset()
1325 journal->j_commit_request = journal->j_commit_sequence; in journal_reset()
1327 journal->j_max_transaction_buffers = journal->j_maxlen / 4; in journal_reset()
1338 journal->j_tail, journal->j_tail_sequence, in journal_reset()
1339 journal->j_errno); in journal_reset()
1340 journal->j_flags |= JBD2_FLUSHED; in journal_reset()
1343 mutex_lock_io(&journal->j_checkpoint_mutex); in journal_reset()
1350 jbd2_journal_update_sb_log_tail(journal, in journal_reset()
1351 journal->j_tail_sequence, in journal_reset()
1352 journal->j_tail, in journal_reset()
1354 mutex_unlock(&journal->j_checkpoint_mutex); in journal_reset()
1356 return jbd2_journal_start_thread(journal); in journal_reset()
1359 static int jbd2_write_superblock(journal_t *journal, int write_flags) in jbd2_write_superblock() argument
1361 struct buffer_head *bh = journal->j_sb_buffer; in jbd2_write_superblock()
1362 journal_superblock_t *sb = journal->j_superblock; in jbd2_write_superblock()
1365 trace_jbd2_write_superblock(journal, write_flags); in jbd2_write_superblock()
1366 if (!(journal->j_flags & JBD2_BARRIER)) in jbd2_write_superblock()
1380 journal->j_devname); in jbd2_write_superblock()
1384 jbd2_superblock_csum_set(journal, sb); in jbd2_write_superblock()
1397 journal->j_devname); in jbd2_write_superblock()
1398 jbd2_journal_abort(journal, ret); in jbd2_write_superblock()
1414 int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid, in jbd2_journal_update_sb_log_tail() argument
1417 journal_superblock_t *sb = journal->j_superblock; in jbd2_journal_update_sb_log_tail()
1420 if (is_journal_aborted(journal)) in jbd2_journal_update_sb_log_tail()
1423 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in jbd2_journal_update_sb_log_tail()
1430 ret = jbd2_write_superblock(journal, write_op); in jbd2_journal_update_sb_log_tail()
1435 write_lock(&journal->j_state_lock); in jbd2_journal_update_sb_log_tail()
1437 journal->j_flags &= ~JBD2_FLUSHED; in jbd2_journal_update_sb_log_tail()
1438 write_unlock(&journal->j_state_lock); in jbd2_journal_update_sb_log_tail()
1452 static void jbd2_mark_journal_empty(journal_t *journal, int write_op) in jbd2_mark_journal_empty() argument
1454 journal_superblock_t *sb = journal->j_superblock; in jbd2_mark_journal_empty()
1456 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in jbd2_mark_journal_empty()
1457 read_lock(&journal->j_state_lock); in jbd2_mark_journal_empty()
1460 read_unlock(&journal->j_state_lock); in jbd2_mark_journal_empty()
1464 journal->j_tail_sequence); in jbd2_mark_journal_empty()
1466 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence); in jbd2_mark_journal_empty()
1468 read_unlock(&journal->j_state_lock); in jbd2_mark_journal_empty()
1470 jbd2_write_superblock(journal, write_op); in jbd2_mark_journal_empty()
1473 write_lock(&journal->j_state_lock); in jbd2_mark_journal_empty()
1474 journal->j_flags |= JBD2_FLUSHED; in jbd2_mark_journal_empty()
1475 write_unlock(&journal->j_state_lock); in jbd2_mark_journal_empty()
1486 void jbd2_journal_update_sb_errno(journal_t *journal) in jbd2_journal_update_sb_errno() argument
1488 journal_superblock_t *sb = journal->j_superblock; in jbd2_journal_update_sb_errno()
1491 read_lock(&journal->j_state_lock); in jbd2_journal_update_sb_errno()
1492 errcode = journal->j_errno; in jbd2_journal_update_sb_errno()
1493 read_unlock(&journal->j_state_lock); in jbd2_journal_update_sb_errno()
1499 jbd2_write_superblock(journal, REQ_SYNC | REQ_FUA); in jbd2_journal_update_sb_errno()
1507 static int journal_get_superblock(journal_t *journal) in journal_get_superblock() argument
1513 bh = journal->j_sb_buffer; in journal_get_superblock()
1529 sb = journal->j_superblock; in journal_get_superblock()
1534 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) { in journal_get_superblock()
1541 journal->j_format_version = 1; in journal_get_superblock()
1544 journal->j_format_version = 2; in journal_get_superblock()
1551 if (be32_to_cpu(sb->s_maxlen) < journal->j_maxlen) in journal_get_superblock()
1552 journal->j_maxlen = be32_to_cpu(sb->s_maxlen); in journal_get_superblock()
1553 else if (be32_to_cpu(sb->s_maxlen) > journal->j_maxlen) { in journal_get_superblock()
1559 be32_to_cpu(sb->s_first) >= journal->j_maxlen) { in journal_get_superblock()
1566 if (jbd2_has_feature_csum2(journal) && in journal_get_superblock()
1567 jbd2_has_feature_csum3(journal)) { in journal_get_superblock()
1574 if (jbd2_journal_has_csum_v2or3_feature(journal) && in journal_get_superblock()
1575 jbd2_has_feature_checksum(journal)) { in journal_get_superblock()
1582 if (!jbd2_verify_csum_type(journal, sb)) { in journal_get_superblock()
1588 if (jbd2_journal_has_csum_v2or3_feature(journal)) { in journal_get_superblock()
1589 journal->j_chksum_driver = crypto_alloc_shash("crc32c", 0, 0); in journal_get_superblock()
1590 if (IS_ERR(journal->j_chksum_driver)) { in journal_get_superblock()
1592 err = PTR_ERR(journal->j_chksum_driver); in journal_get_superblock()
1593 journal->j_chksum_driver = NULL; in journal_get_superblock()
1599 if (!jbd2_superblock_csum_verify(journal, sb)) { in journal_get_superblock()
1606 if (jbd2_journal_has_csum_v2or3(journal)) in journal_get_superblock()
1607 journal->j_csum_seed = jbd2_chksum(journal, ~0, sb->s_uuid, in journal_get_superblock()
1615 journal_fail_superblock(journal); in journal_get_superblock()
1624 static int load_superblock(journal_t *journal) in load_superblock() argument
1629 err = journal_get_superblock(journal); in load_superblock()
1633 sb = journal->j_superblock; in load_superblock()
1635 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence); in load_superblock()
1636 journal->j_tail = be32_to_cpu(sb->s_start); in load_superblock()
1637 journal->j_first = be32_to_cpu(sb->s_first); in load_superblock()
1638 journal->j_last = be32_to_cpu(sb->s_maxlen); in load_superblock()
1639 journal->j_errno = be32_to_cpu(sb->s_errno); in load_superblock()
1653 int jbd2_journal_load(journal_t *journal) in jbd2_journal_load() argument
1658 err = load_superblock(journal); in jbd2_journal_load()
1662 sb = journal->j_superblock; in jbd2_journal_load()
1666 if (journal->j_format_version >= 2) { in jbd2_journal_load()
1686 if (jbd2_journal_recover(journal)) in jbd2_journal_load()
1689 if (journal->j_failed_commit) { in jbd2_journal_load()
1691 "is corrupt.\n", journal->j_failed_commit, in jbd2_journal_load()
1692 journal->j_devname); in jbd2_journal_load()
1699 if (journal_reset(journal)) in jbd2_journal_load()
1702 journal->j_flags &= ~JBD2_ABORT; in jbd2_journal_load()
1703 journal->j_flags |= JBD2_LOADED; in jbd2_journal_load()
1719 int jbd2_journal_destroy(journal_t *journal) in jbd2_journal_destroy() argument
1724 journal_kill_thread(journal); in jbd2_journal_destroy()
1727 if (journal->j_running_transaction) in jbd2_journal_destroy()
1728 jbd2_journal_commit_transaction(journal); in jbd2_journal_destroy()
1733 spin_lock(&journal->j_list_lock); in jbd2_journal_destroy()
1734 while (journal->j_checkpoint_transactions != NULL) { in jbd2_journal_destroy()
1735 spin_unlock(&journal->j_list_lock); in jbd2_journal_destroy()
1736 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_destroy()
1737 err = jbd2_log_do_checkpoint(journal); in jbd2_journal_destroy()
1738 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_destroy()
1744 jbd2_journal_destroy_checkpoint(journal); in jbd2_journal_destroy()
1745 spin_lock(&journal->j_list_lock); in jbd2_journal_destroy()
1748 spin_lock(&journal->j_list_lock); in jbd2_journal_destroy()
1751 J_ASSERT(journal->j_running_transaction == NULL); in jbd2_journal_destroy()
1752 J_ASSERT(journal->j_committing_transaction == NULL); in jbd2_journal_destroy()
1753 J_ASSERT(journal->j_checkpoint_transactions == NULL); in jbd2_journal_destroy()
1754 spin_unlock(&journal->j_list_lock); in jbd2_journal_destroy()
1756 if (journal->j_sb_buffer) { in jbd2_journal_destroy()
1757 if (!is_journal_aborted(journal)) { in jbd2_journal_destroy()
1758 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_destroy()
1760 write_lock(&journal->j_state_lock); in jbd2_journal_destroy()
1761 journal->j_tail_sequence = in jbd2_journal_destroy()
1762 ++journal->j_transaction_sequence; in jbd2_journal_destroy()
1763 write_unlock(&journal->j_state_lock); in jbd2_journal_destroy()
1765 jbd2_mark_journal_empty(journal, in jbd2_journal_destroy()
1767 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_destroy()
1770 brelse(journal->j_sb_buffer); in jbd2_journal_destroy()
1773 if (journal->j_proc_entry) in jbd2_journal_destroy()
1774 jbd2_stats_proc_exit(journal); in jbd2_journal_destroy()
1775 iput(journal->j_inode); in jbd2_journal_destroy()
1776 if (journal->j_revoke) in jbd2_journal_destroy()
1777 jbd2_journal_destroy_revoke(journal); in jbd2_journal_destroy()
1778 if (journal->j_chksum_driver) in jbd2_journal_destroy()
1779 crypto_free_shash(journal->j_chksum_driver); in jbd2_journal_destroy()
1780 kfree(journal->j_wbuf); in jbd2_journal_destroy()
1781 kfree(journal); in jbd2_journal_destroy()
1798 int jbd2_journal_check_used_features (journal_t *journal, unsigned long compat, in jbd2_journal_check_used_features() argument
1806 if (journal->j_format_version == 0 && in jbd2_journal_check_used_features()
1807 journal_get_superblock(journal) != 0) in jbd2_journal_check_used_features()
1809 if (journal->j_format_version == 1) in jbd2_journal_check_used_features()
1812 sb = journal->j_superblock; in jbd2_journal_check_used_features()
1833 int jbd2_journal_check_available_features (journal_t *journal, unsigned long compat, in jbd2_journal_check_available_features() argument
1843 if (journal->j_format_version != 2) in jbd2_journal_check_available_features()
1866 int jbd2_journal_set_features (journal_t *journal, unsigned long compat, in jbd2_journal_set_features() argument
1875 if (jbd2_journal_check_used_features(journal, compat, ro, incompat)) in jbd2_journal_set_features()
1878 if (!jbd2_journal_check_available_features(journal, compat, ro, incompat)) in jbd2_journal_set_features()
1895 sb = journal->j_superblock; in jbd2_journal_set_features()
1904 if (journal->j_chksum_driver == NULL) { in jbd2_journal_set_features()
1905 journal->j_chksum_driver = crypto_alloc_shash("crc32c", in jbd2_journal_set_features()
1907 if (IS_ERR(journal->j_chksum_driver)) { in jbd2_journal_set_features()
1910 journal->j_chksum_driver = NULL; in jbd2_journal_set_features()
1915 journal->j_csum_seed = jbd2_chksum(journal, ~0, in jbd2_journal_set_features()
1947 void jbd2_journal_clear_features(journal_t *journal, unsigned long compat, in jbd2_journal_clear_features() argument
1955 sb = journal->j_superblock; in jbd2_journal_clear_features()
1972 int jbd2_journal_flush(journal_t *journal) in jbd2_journal_flush() argument
1977 write_lock(&journal->j_state_lock); in jbd2_journal_flush()
1980 if (journal->j_running_transaction) { in jbd2_journal_flush()
1981 transaction = journal->j_running_transaction; in jbd2_journal_flush()
1982 __jbd2_log_start_commit(journal, transaction->t_tid); in jbd2_journal_flush()
1983 } else if (journal->j_committing_transaction) in jbd2_journal_flush()
1984 transaction = journal->j_committing_transaction; in jbd2_journal_flush()
1990 write_unlock(&journal->j_state_lock); in jbd2_journal_flush()
1991 jbd2_log_wait_commit(journal, tid); in jbd2_journal_flush()
1993 write_unlock(&journal->j_state_lock); in jbd2_journal_flush()
1997 spin_lock(&journal->j_list_lock); in jbd2_journal_flush()
1998 while (!err && journal->j_checkpoint_transactions != NULL) { in jbd2_journal_flush()
1999 spin_unlock(&journal->j_list_lock); in jbd2_journal_flush()
2000 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2001 err = jbd2_log_do_checkpoint(journal); in jbd2_journal_flush()
2002 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2003 spin_lock(&journal->j_list_lock); in jbd2_journal_flush()
2005 spin_unlock(&journal->j_list_lock); in jbd2_journal_flush()
2007 if (is_journal_aborted(journal)) in jbd2_journal_flush()
2010 mutex_lock_io(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2012 err = jbd2_cleanup_journal_tail(journal); in jbd2_journal_flush()
2014 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2025 jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA); in jbd2_journal_flush()
2026 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_flush()
2027 write_lock(&journal->j_state_lock); in jbd2_journal_flush()
2028 J_ASSERT(!journal->j_running_transaction); in jbd2_journal_flush()
2029 J_ASSERT(!journal->j_committing_transaction); in jbd2_journal_flush()
2030 J_ASSERT(!journal->j_checkpoint_transactions); in jbd2_journal_flush()
2031 J_ASSERT(journal->j_head == journal->j_tail); in jbd2_journal_flush()
2032 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence); in jbd2_journal_flush()
2033 write_unlock(&journal->j_state_lock); in jbd2_journal_flush()
2051 int jbd2_journal_wipe(journal_t *journal, int write) in jbd2_journal_wipe() argument
2055 J_ASSERT (!(journal->j_flags & JBD2_LOADED)); in jbd2_journal_wipe()
2057 err = load_superblock(journal); in jbd2_journal_wipe()
2061 if (!journal->j_tail) in jbd2_journal_wipe()
2067 err = jbd2_journal_skip_recovery(journal); in jbd2_journal_wipe()
2070 mutex_lock(&journal->j_checkpoint_mutex); in jbd2_journal_wipe()
2071 jbd2_mark_journal_empty(journal, REQ_SYNC | REQ_FUA); in jbd2_journal_wipe()
2072 mutex_unlock(&journal->j_checkpoint_mutex); in jbd2_journal_wipe()
2092 void __jbd2_journal_abort_hard(journal_t *journal) in __jbd2_journal_abort_hard() argument
2096 if (journal->j_flags & JBD2_ABORT) in __jbd2_journal_abort_hard()
2100 journal->j_devname); in __jbd2_journal_abort_hard()
2102 write_lock(&journal->j_state_lock); in __jbd2_journal_abort_hard()
2103 journal->j_flags |= JBD2_ABORT; in __jbd2_journal_abort_hard()
2104 transaction = journal->j_running_transaction; in __jbd2_journal_abort_hard()
2106 __jbd2_log_start_commit(journal, transaction->t_tid); in __jbd2_journal_abort_hard()
2107 write_unlock(&journal->j_state_lock); in __jbd2_journal_abort_hard()
2112 static void __journal_abort_soft (journal_t *journal, int errno) in __journal_abort_soft() argument
2116 write_lock(&journal->j_state_lock); in __journal_abort_soft()
2117 old_errno = journal->j_errno; in __journal_abort_soft()
2118 if (!journal->j_errno || errno == -ESHUTDOWN) in __journal_abort_soft()
2119 journal->j_errno = errno; in __journal_abort_soft()
2121 if (journal->j_flags & JBD2_ABORT) { in __journal_abort_soft()
2122 write_unlock(&journal->j_state_lock); in __journal_abort_soft()
2125 jbd2_journal_update_sb_errno(journal); in __journal_abort_soft()
2128 write_unlock(&journal->j_state_lock); in __journal_abort_soft()
2130 __jbd2_journal_abort_hard(journal); in __journal_abort_soft()
2133 jbd2_journal_update_sb_errno(journal); in __journal_abort_soft()
2134 write_lock(&journal->j_state_lock); in __journal_abort_soft()
2135 journal->j_flags |= JBD2_REC_ERR; in __journal_abort_soft()
2136 write_unlock(&journal->j_state_lock); in __journal_abort_soft()
2186 void jbd2_journal_abort(journal_t *journal, int errno) in jbd2_journal_abort() argument
2188 __journal_abort_soft(journal, errno); in jbd2_journal_abort()
2202 int jbd2_journal_errno(journal_t *journal) in jbd2_journal_errno() argument
2206 read_lock(&journal->j_state_lock); in jbd2_journal_errno()
2207 if (journal->j_flags & JBD2_ABORT) in jbd2_journal_errno()
2210 err = journal->j_errno; in jbd2_journal_errno()
2211 read_unlock(&journal->j_state_lock); in jbd2_journal_errno()
2222 int jbd2_journal_clear_err(journal_t *journal) in jbd2_journal_clear_err() argument
2226 write_lock(&journal->j_state_lock); in jbd2_journal_clear_err()
2227 if (journal->j_flags & JBD2_ABORT) in jbd2_journal_clear_err()
2230 journal->j_errno = 0; in jbd2_journal_clear_err()
2231 write_unlock(&journal->j_state_lock); in jbd2_journal_clear_err()
2242 void jbd2_journal_ack_err(journal_t *journal) in jbd2_journal_ack_err() argument
2244 write_lock(&journal->j_state_lock); in jbd2_journal_ack_err()
2245 if (journal->j_errno) in jbd2_journal_ack_err()
2246 journal->j_flags |= JBD2_ACK_ERR; in jbd2_journal_ack_err()
2247 write_unlock(&journal->j_state_lock); in jbd2_journal_ack_err()
2258 size_t journal_tag_bytes(journal_t *journal) in journal_tag_bytes() argument
2262 if (jbd2_has_feature_csum3(journal)) in journal_tag_bytes()
2267 if (jbd2_has_feature_csum2(journal)) in journal_tag_bytes()
2270 if (jbd2_has_feature_64bit(journal)) in journal_tag_bytes()
2596 void jbd2_journal_release_jbd_inode(journal_t *journal, in jbd2_journal_release_jbd_inode() argument
2599 if (!journal) in jbd2_journal_release_jbd_inode()
2602 spin_lock(&journal->j_list_lock); in jbd2_journal_release_jbd_inode()
2609 spin_unlock(&journal->j_list_lock); in jbd2_journal_release_jbd_inode()
2619 spin_unlock(&journal->j_list_lock); in jbd2_journal_release_jbd_inode()