Lines Matching refs:journal
90 static void __journal_abort_soft (journal_t *journal, int errno);
91 static const char *journal_dev_name(journal_t *journal, char *buffer);
140 journal_t *journal = arg; in kjournald() local
147 setup_timer(&journal->j_commit_timer, commit_timeout, in kjournald()
153 journal->j_task = current; in kjournald()
154 wake_up(&journal->j_wait_done_commit); in kjournald()
157 journal->j_commit_interval / HZ); in kjournald()
162 spin_lock(&journal->j_state_lock); in kjournald()
165 if (journal->j_flags & JFS_UNMOUNT) in kjournald()
169 journal->j_commit_sequence, journal->j_commit_request); in kjournald()
171 if (journal->j_commit_sequence != journal->j_commit_request) { in kjournald()
173 spin_unlock(&journal->j_state_lock); in kjournald()
174 del_timer_sync(&journal->j_commit_timer); in kjournald()
175 journal_commit_transaction(journal); in kjournald()
176 spin_lock(&journal->j_state_lock); in kjournald()
180 wake_up(&journal->j_wait_done_commit); in kjournald()
188 spin_unlock(&journal->j_state_lock); in kjournald()
190 spin_lock(&journal->j_state_lock); in kjournald()
199 prepare_to_wait(&journal->j_wait_commit, &wait, in kjournald()
201 if (journal->j_commit_sequence != journal->j_commit_request) in kjournald()
203 transaction = journal->j_running_transaction; in kjournald()
207 if (journal->j_flags & JFS_UNMOUNT) in kjournald()
210 spin_unlock(&journal->j_state_lock); in kjournald()
212 spin_lock(&journal->j_state_lock); in kjournald()
214 finish_wait(&journal->j_wait_commit, &wait); in kjournald()
222 transaction = journal->j_running_transaction; in kjournald()
224 journal->j_commit_request = transaction->t_tid; in kjournald()
230 spin_unlock(&journal->j_state_lock); in kjournald()
231 del_timer_sync(&journal->j_commit_timer); in kjournald()
232 journal->j_task = NULL; in kjournald()
233 wake_up(&journal->j_wait_done_commit); in kjournald()
238 static int journal_start_thread(journal_t *journal) in journal_start_thread() argument
242 t = kthread_run(kjournald, journal, "kjournald"); in journal_start_thread()
246 wait_event(journal->j_wait_done_commit, journal->j_task != NULL); in journal_start_thread()
250 static void journal_kill_thread(journal_t *journal) in journal_kill_thread() argument
252 spin_lock(&journal->j_state_lock); in journal_kill_thread()
253 journal->j_flags |= JFS_UNMOUNT; in journal_kill_thread()
255 while (journal->j_task) { in journal_kill_thread()
256 wake_up(&journal->j_wait_commit); in journal_kill_thread()
257 spin_unlock(&journal->j_state_lock); in journal_kill_thread()
258 wait_event(journal->j_wait_done_commit, in journal_kill_thread()
259 journal->j_task == NULL); in journal_kill_thread()
260 spin_lock(&journal->j_state_lock); in journal_kill_thread()
262 spin_unlock(&journal->j_state_lock); in journal_kill_thread()
316 journal_t *journal = transaction->t_journal; in journal_write_metadata_buffer() local
410 spin_lock(&journal->j_list_lock); in journal_write_metadata_buffer()
412 spin_unlock(&journal->j_list_lock); in journal_write_metadata_buffer()
434 int __log_space_left(journal_t *journal) in __log_space_left() argument
436 int left = journal->j_free; in __log_space_left()
438 assert_spin_locked(&journal->j_state_lock); in __log_space_left()
458 int __log_start_commit(journal_t *journal, tid_t target) in __log_start_commit() argument
465 if (journal->j_commit_request != target && in __log_start_commit()
466 journal->j_running_transaction && in __log_start_commit()
467 journal->j_running_transaction->t_tid == target) { in __log_start_commit()
473 journal->j_commit_request = target; in __log_start_commit()
475 journal->j_commit_request, in __log_start_commit()
476 journal->j_commit_sequence); in __log_start_commit()
477 wake_up(&journal->j_wait_commit); in __log_start_commit()
479 } else if (!tid_geq(journal->j_commit_request, target)) in __log_start_commit()
484 journal->j_commit_request, journal->j_commit_sequence, in __log_start_commit()
485 target, journal->j_running_transaction ? in __log_start_commit()
486 journal->j_running_transaction->t_tid : 0); in __log_start_commit()
490 int log_start_commit(journal_t *journal, tid_t tid) in log_start_commit() argument
494 spin_lock(&journal->j_state_lock); in log_start_commit()
495 ret = __log_start_commit(journal, tid); in log_start_commit()
496 spin_unlock(&journal->j_state_lock); in log_start_commit()
510 int journal_force_commit_nested(journal_t *journal) in journal_force_commit_nested() argument
515 spin_lock(&journal->j_state_lock); in journal_force_commit_nested()
516 if (journal->j_running_transaction && !current->journal_info) { in journal_force_commit_nested()
517 transaction = journal->j_running_transaction; in journal_force_commit_nested()
518 __log_start_commit(journal, transaction->t_tid); in journal_force_commit_nested()
519 } else if (journal->j_committing_transaction) in journal_force_commit_nested()
520 transaction = journal->j_committing_transaction; in journal_force_commit_nested()
523 spin_unlock(&journal->j_state_lock); in journal_force_commit_nested()
528 spin_unlock(&journal->j_state_lock); in journal_force_commit_nested()
529 log_wait_commit(journal, tid); in journal_force_commit_nested()
538 int journal_start_commit(journal_t *journal, tid_t *ptid) in journal_start_commit() argument
542 spin_lock(&journal->j_state_lock); in journal_start_commit()
543 if (journal->j_running_transaction) { in journal_start_commit()
544 tid_t tid = journal->j_running_transaction->t_tid; in journal_start_commit()
546 __log_start_commit(journal, tid); in journal_start_commit()
552 } else if (journal->j_committing_transaction) { in journal_start_commit()
558 *ptid = journal->j_committing_transaction->t_tid; in journal_start_commit()
561 spin_unlock(&journal->j_state_lock); in journal_start_commit()
569 int log_wait_commit(journal_t *journal, tid_t tid) in log_wait_commit() argument
574 spin_lock(&journal->j_state_lock); in log_wait_commit()
575 if (!tid_geq(journal->j_commit_request, tid)) { in log_wait_commit()
578 __func__, journal->j_commit_request, tid); in log_wait_commit()
580 spin_unlock(&journal->j_state_lock); in log_wait_commit()
582 spin_lock(&journal->j_state_lock); in log_wait_commit()
587 if (!((journal->j_running_transaction && in log_wait_commit()
588 journal->j_running_transaction->t_tid == tid) || in log_wait_commit()
589 (journal->j_committing_transaction && in log_wait_commit()
590 journal->j_committing_transaction->t_tid == tid))) in log_wait_commit()
593 if (!tid_geq(journal->j_commit_waited, tid)) in log_wait_commit()
594 journal->j_commit_waited = tid; in log_wait_commit()
595 while (tid_gt(tid, journal->j_commit_sequence)) { in log_wait_commit()
597 tid, journal->j_commit_sequence); in log_wait_commit()
598 wake_up(&journal->j_wait_commit); in log_wait_commit()
599 spin_unlock(&journal->j_state_lock); in log_wait_commit()
600 wait_event(journal->j_wait_done_commit, in log_wait_commit()
601 !tid_gt(tid, journal->j_commit_sequence)); in log_wait_commit()
602 spin_lock(&journal->j_state_lock); in log_wait_commit()
605 spin_unlock(&journal->j_state_lock); in log_wait_commit()
607 if (unlikely(is_journal_aborted(journal))) in log_wait_commit()
618 int journal_trans_will_send_data_barrier(journal_t *journal, tid_t tid) in journal_trans_will_send_data_barrier() argument
623 if (!(journal->j_flags & JFS_BARRIER)) in journal_trans_will_send_data_barrier()
625 spin_lock(&journal->j_state_lock); in journal_trans_will_send_data_barrier()
627 if (tid_geq(journal->j_commit_sequence, tid)) in journal_trans_will_send_data_barrier()
633 commit_trans = journal->j_committing_transaction; in journal_trans_will_send_data_barrier()
639 spin_unlock(&journal->j_state_lock); in journal_trans_will_send_data_barrier()
648 int journal_next_log_block(journal_t *journal, unsigned int *retp) in journal_next_log_block() argument
652 spin_lock(&journal->j_state_lock); in journal_next_log_block()
653 J_ASSERT(journal->j_free > 1); in journal_next_log_block()
655 blocknr = journal->j_head; in journal_next_log_block()
656 journal->j_head++; in journal_next_log_block()
657 journal->j_free--; in journal_next_log_block()
658 if (journal->j_head == journal->j_last) in journal_next_log_block()
659 journal->j_head = journal->j_first; in journal_next_log_block()
660 spin_unlock(&journal->j_state_lock); in journal_next_log_block()
661 return journal_bmap(journal, blocknr, retp); in journal_next_log_block()
671 int journal_bmap(journal_t *journal, unsigned int blocknr, in journal_bmap() argument
677 if (journal->j_inode) { in journal_bmap()
678 ret = bmap(journal->j_inode, blocknr); in journal_bmap()
688 bdevname(journal->j_dev, b)); in journal_bmap()
690 __journal_abort_soft(journal, err); in journal_bmap()
708 struct journal_head *journal_get_descriptor_buffer(journal_t *journal) in journal_get_descriptor_buffer() argument
714 err = journal_next_log_block(journal, &blocknr); in journal_get_descriptor_buffer()
719 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize); in journal_get_descriptor_buffer()
723 memset(bh->b_data, 0, journal->j_blocksize); in journal_get_descriptor_buffer()
741 journal_t *journal; in journal_init_common() local
744 journal = kzalloc(sizeof(*journal), GFP_KERNEL); in journal_init_common()
745 if (!journal) in journal_init_common()
748 init_waitqueue_head(&journal->j_wait_transaction_locked); in journal_init_common()
749 init_waitqueue_head(&journal->j_wait_logspace); in journal_init_common()
750 init_waitqueue_head(&journal->j_wait_done_commit); in journal_init_common()
751 init_waitqueue_head(&journal->j_wait_checkpoint); in journal_init_common()
752 init_waitqueue_head(&journal->j_wait_commit); in journal_init_common()
753 init_waitqueue_head(&journal->j_wait_updates); in journal_init_common()
754 mutex_init(&journal->j_checkpoint_mutex); in journal_init_common()
755 spin_lock_init(&journal->j_revoke_lock); in journal_init_common()
756 spin_lock_init(&journal->j_list_lock); in journal_init_common()
757 spin_lock_init(&journal->j_state_lock); in journal_init_common()
759 journal->j_commit_interval = (HZ * JBD_DEFAULT_MAX_COMMIT_AGE); in journal_init_common()
762 journal->j_flags = JFS_ABORT; in journal_init_common()
765 err = journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH); in journal_init_common()
767 kfree(journal); in journal_init_common()
770 return journal; in journal_init_common()
802 journal_t *journal = journal_init_common(); in journal_init_dev() local
806 if (!journal) in journal_init_dev()
810 journal->j_blocksize = blocksize; in journal_init_dev()
811 n = journal->j_blocksize / sizeof(journal_block_tag_t); in journal_init_dev()
812 journal->j_wbufsize = n; in journal_init_dev()
813 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL); in journal_init_dev()
814 if (!journal->j_wbuf) { in journal_init_dev()
819 journal->j_dev = bdev; in journal_init_dev()
820 journal->j_fs_dev = fs_dev; in journal_init_dev()
821 journal->j_blk_offset = start; in journal_init_dev()
822 journal->j_maxlen = len; in journal_init_dev()
824 bh = __getblk(journal->j_dev, start, journal->j_blocksize); in journal_init_dev()
831 journal->j_sb_buffer = bh; in journal_init_dev()
832 journal->j_superblock = (journal_superblock_t *)bh->b_data; in journal_init_dev()
834 return journal; in journal_init_dev()
836 kfree(journal->j_wbuf); in journal_init_dev()
837 kfree(journal); in journal_init_dev()
852 journal_t *journal = journal_init_common(); in journal_init_inode() local
857 if (!journal) in journal_init_inode()
860 journal->j_dev = journal->j_fs_dev = inode->i_sb->s_bdev; in journal_init_inode()
861 journal->j_inode = inode; in journal_init_inode()
864 journal, inode->i_sb->s_id, inode->i_ino, in journal_init_inode()
868 journal->j_maxlen = inode->i_size >> inode->i_sb->s_blocksize_bits; in journal_init_inode()
869 journal->j_blocksize = inode->i_sb->s_blocksize; in journal_init_inode()
872 n = journal->j_blocksize / sizeof(journal_block_tag_t); in journal_init_inode()
873 journal->j_wbufsize = n; in journal_init_inode()
874 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL); in journal_init_inode()
875 if (!journal->j_wbuf) { in journal_init_inode()
881 err = journal_bmap(journal, 0, &blocknr); in journal_init_inode()
889 bh = getblk_unmovable(journal->j_dev, blocknr, journal->j_blocksize); in journal_init_inode()
896 journal->j_sb_buffer = bh; in journal_init_inode()
897 journal->j_superblock = (journal_superblock_t *)bh->b_data; in journal_init_inode()
899 return journal; in journal_init_inode()
901 kfree(journal->j_wbuf); in journal_init_inode()
902 kfree(journal); in journal_init_inode()
911 static void journal_fail_superblock (journal_t *journal) in journal_fail_superblock() argument
913 struct buffer_head *bh = journal->j_sb_buffer; in journal_fail_superblock()
915 journal->j_sb_buffer = NULL; in journal_fail_superblock()
925 static int journal_reset(journal_t *journal) in journal_reset() argument
927 journal_superblock_t *sb = journal->j_superblock; in journal_reset()
935 journal_fail_superblock(journal); in journal_reset()
939 journal->j_first = first; in journal_reset()
940 journal->j_last = last; in journal_reset()
942 journal->j_head = first; in journal_reset()
943 journal->j_tail = first; in journal_reset()
944 journal->j_free = last - first; in journal_reset()
946 journal->j_tail_sequence = journal->j_transaction_sequence; in journal_reset()
947 journal->j_commit_sequence = journal->j_transaction_sequence - 1; in journal_reset()
948 journal->j_commit_request = journal->j_commit_sequence; in journal_reset()
950 journal->j_max_transaction_buffers = journal->j_maxlen / 4; in journal_reset()
961 journal->j_tail, journal->j_tail_sequence, in journal_reset()
962 journal->j_errno); in journal_reset()
963 journal->j_flags |= JFS_FLUSHED; in journal_reset()
966 mutex_lock(&journal->j_checkpoint_mutex); in journal_reset()
973 journal_update_sb_log_tail(journal, in journal_reset()
974 journal->j_tail_sequence, in journal_reset()
975 journal->j_tail, in journal_reset()
977 mutex_unlock(&journal->j_checkpoint_mutex); in journal_reset()
979 return journal_start_thread(journal); in journal_reset()
990 int journal_create(journal_t *journal) in journal_create() argument
997 if (journal->j_maxlen < JFS_MIN_JOURNAL_BLOCKS) { in journal_create()
999 journal->j_maxlen); in journal_create()
1000 journal_fail_superblock(journal); in journal_create()
1004 if (journal->j_inode == NULL) { in journal_create()
1017 for (i = 0; i < journal->j_maxlen; i++) { in journal_create()
1018 err = journal_bmap(journal, i, &blocknr); in journal_create()
1021 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize); in journal_create()
1025 memset (bh->b_data, 0, journal->j_blocksize); in journal_create()
1034 sync_blockdev(journal->j_dev); in journal_create()
1038 sb = journal->j_superblock; in journal_create()
1043 sb->s_blocksize = cpu_to_be32(journal->j_blocksize); in journal_create()
1044 sb->s_maxlen = cpu_to_be32(journal->j_maxlen); in journal_create()
1047 journal->j_transaction_sequence = 1; in journal_create()
1049 journal->j_flags &= ~JFS_ABORT; in journal_create()
1050 journal->j_format_version = 2; in journal_create()
1052 return journal_reset(journal); in journal_create()
1055 static void journal_write_superblock(journal_t *journal, int write_op) in journal_write_superblock() argument
1057 struct buffer_head *bh = journal->j_sb_buffer; in journal_write_superblock()
1060 trace_journal_write_superblock(journal, write_op); in journal_write_superblock()
1061 if (!(journal->j_flags & JFS_BARRIER)) in journal_write_superblock()
1076 journal_dev_name(journal, b)); in journal_write_superblock()
1094 ret, journal_dev_name(journal, b)); in journal_write_superblock()
1108 void journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid, in journal_update_sb_log_tail() argument
1111 journal_superblock_t *sb = journal->j_superblock; in journal_update_sb_log_tail()
1113 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in journal_update_sb_log_tail()
1120 journal_write_superblock(journal, write_op); in journal_update_sb_log_tail()
1123 spin_lock(&journal->j_state_lock); in journal_update_sb_log_tail()
1125 journal->j_flags &= ~JFS_FLUSHED; in journal_update_sb_log_tail()
1126 spin_unlock(&journal->j_state_lock); in journal_update_sb_log_tail()
1136 static void mark_journal_empty(journal_t *journal) in mark_journal_empty() argument
1138 journal_superblock_t *sb = journal->j_superblock; in mark_journal_empty()
1140 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in mark_journal_empty()
1141 spin_lock(&journal->j_state_lock); in mark_journal_empty()
1144 spin_unlock(&journal->j_state_lock); in mark_journal_empty()
1148 journal->j_tail_sequence); in mark_journal_empty()
1150 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence); in mark_journal_empty()
1152 spin_unlock(&journal->j_state_lock); in mark_journal_empty()
1154 journal_write_superblock(journal, WRITE_FUA); in mark_journal_empty()
1156 spin_lock(&journal->j_state_lock); in mark_journal_empty()
1158 journal->j_flags |= JFS_FLUSHED; in mark_journal_empty()
1159 spin_unlock(&journal->j_state_lock); in mark_journal_empty()
1169 static void journal_update_sb_errno(journal_t *journal) in journal_update_sb_errno() argument
1171 journal_superblock_t *sb = journal->j_superblock; in journal_update_sb_errno()
1173 spin_lock(&journal->j_state_lock); in journal_update_sb_errno()
1175 journal->j_errno); in journal_update_sb_errno()
1176 sb->s_errno = cpu_to_be32(journal->j_errno); in journal_update_sb_errno()
1177 spin_unlock(&journal->j_state_lock); in journal_update_sb_errno()
1179 journal_write_superblock(journal, WRITE_SYNC); in journal_update_sb_errno()
1187 static int journal_get_superblock(journal_t *journal) in journal_get_superblock() argument
1193 bh = journal->j_sb_buffer; in journal_get_superblock()
1206 sb = journal->j_superblock; in journal_get_superblock()
1211 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) { in journal_get_superblock()
1218 journal->j_format_version = 1; in journal_get_superblock()
1221 journal->j_format_version = 2; in journal_get_superblock()
1228 if (be32_to_cpu(sb->s_maxlen) < journal->j_maxlen) in journal_get_superblock()
1229 journal->j_maxlen = be32_to_cpu(sb->s_maxlen); in journal_get_superblock()
1230 else if (be32_to_cpu(sb->s_maxlen) > journal->j_maxlen) { in journal_get_superblock()
1236 be32_to_cpu(sb->s_first) >= journal->j_maxlen) { in journal_get_superblock()
1246 journal_fail_superblock(journal); in journal_get_superblock()
1255 static int load_superblock(journal_t *journal) in load_superblock() argument
1260 err = journal_get_superblock(journal); in load_superblock()
1264 sb = journal->j_superblock; in load_superblock()
1266 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence); in load_superblock()
1267 journal->j_tail = be32_to_cpu(sb->s_start); in load_superblock()
1268 journal->j_first = be32_to_cpu(sb->s_first); in load_superblock()
1269 journal->j_last = be32_to_cpu(sb->s_maxlen); in load_superblock()
1270 journal->j_errno = be32_to_cpu(sb->s_errno); in load_superblock()
1284 int journal_load(journal_t *journal) in journal_load() argument
1289 err = load_superblock(journal); in journal_load()
1293 sb = journal->j_superblock; in journal_load()
1297 if (journal->j_format_version >= 2) { in journal_load()
1310 if (journal_recover(journal)) in journal_load()
1316 if (journal_reset(journal)) in journal_load()
1319 journal->j_flags &= ~JFS_ABORT; in journal_load()
1320 journal->j_flags |= JFS_LOADED; in journal_load()
1336 int journal_destroy(journal_t *journal) in journal_destroy() argument
1342 journal_kill_thread(journal); in journal_destroy()
1345 if (journal->j_running_transaction) in journal_destroy()
1346 journal_commit_transaction(journal); in journal_destroy()
1351 mutex_lock(&journal->j_checkpoint_mutex); in journal_destroy()
1353 spin_lock(&journal->j_list_lock); in journal_destroy()
1354 while (journal->j_checkpoint_transactions != NULL) { in journal_destroy()
1355 spin_unlock(&journal->j_list_lock); in journal_destroy()
1356 log_do_checkpoint(journal); in journal_destroy()
1357 spin_lock(&journal->j_list_lock); in journal_destroy()
1360 J_ASSERT(journal->j_running_transaction == NULL); in journal_destroy()
1361 J_ASSERT(journal->j_committing_transaction == NULL); in journal_destroy()
1362 J_ASSERT(journal->j_checkpoint_transactions == NULL); in journal_destroy()
1363 spin_unlock(&journal->j_list_lock); in journal_destroy()
1365 if (journal->j_sb_buffer) { in journal_destroy()
1366 if (!is_journal_aborted(journal)) { in journal_destroy()
1367 journal->j_tail_sequence = in journal_destroy()
1368 ++journal->j_transaction_sequence; in journal_destroy()
1369 mark_journal_empty(journal); in journal_destroy()
1372 brelse(journal->j_sb_buffer); in journal_destroy()
1374 mutex_unlock(&journal->j_checkpoint_mutex); in journal_destroy()
1376 iput(journal->j_inode); in journal_destroy()
1377 if (journal->j_revoke) in journal_destroy()
1378 journal_destroy_revoke(journal); in journal_destroy()
1379 kfree(journal->j_wbuf); in journal_destroy()
1380 kfree(journal); in journal_destroy()
1397 int journal_check_used_features (journal_t *journal, unsigned long compat, in journal_check_used_features() argument
1404 if (journal->j_format_version == 1) in journal_check_used_features()
1407 sb = journal->j_superblock; in journal_check_used_features()
1428 int journal_check_available_features (journal_t *journal, unsigned long compat, in journal_check_available_features() argument
1438 if (journal->j_format_version != 2) in journal_check_available_features()
1461 int journal_set_features (journal_t *journal, unsigned long compat, in journal_set_features() argument
1466 if (journal_check_used_features(journal, compat, ro, incompat)) in journal_set_features()
1469 if (!journal_check_available_features(journal, compat, ro, incompat)) in journal_set_features()
1475 sb = journal->j_superblock; in journal_set_features()
1492 int journal_update_format (journal_t *journal) in journal_update_format() argument
1497 err = journal_get_superblock(journal); in journal_update_format()
1501 sb = journal->j_superblock; in journal_update_format()
1507 return journal_convert_superblock_v1(journal, sb); in journal_update_format()
1514 static int journal_convert_superblock_v1(journal_t *journal, in journal_convert_superblock_v1() argument
1530 journal->j_format_version = 2; in journal_convert_superblock_v1()
1532 bh = journal->j_sb_buffer; in journal_convert_superblock_v1()
1549 int journal_flush(journal_t *journal) in journal_flush() argument
1554 spin_lock(&journal->j_state_lock); in journal_flush()
1557 if (journal->j_running_transaction) { in journal_flush()
1558 transaction = journal->j_running_transaction; in journal_flush()
1559 __log_start_commit(journal, transaction->t_tid); in journal_flush()
1560 } else if (journal->j_committing_transaction) in journal_flush()
1561 transaction = journal->j_committing_transaction; in journal_flush()
1567 spin_unlock(&journal->j_state_lock); in journal_flush()
1568 log_wait_commit(journal, tid); in journal_flush()
1570 spin_unlock(&journal->j_state_lock); in journal_flush()
1574 spin_lock(&journal->j_list_lock); in journal_flush()
1575 while (!err && journal->j_checkpoint_transactions != NULL) { in journal_flush()
1576 spin_unlock(&journal->j_list_lock); in journal_flush()
1577 mutex_lock(&journal->j_checkpoint_mutex); in journal_flush()
1578 err = log_do_checkpoint(journal); in journal_flush()
1579 mutex_unlock(&journal->j_checkpoint_mutex); in journal_flush()
1580 spin_lock(&journal->j_list_lock); in journal_flush()
1582 spin_unlock(&journal->j_list_lock); in journal_flush()
1584 if (is_journal_aborted(journal)) in journal_flush()
1587 mutex_lock(&journal->j_checkpoint_mutex); in journal_flush()
1588 cleanup_journal_tail(journal); in journal_flush()
1595 mark_journal_empty(journal); in journal_flush()
1596 mutex_unlock(&journal->j_checkpoint_mutex); in journal_flush()
1597 spin_lock(&journal->j_state_lock); in journal_flush()
1598 J_ASSERT(!journal->j_running_transaction); in journal_flush()
1599 J_ASSERT(!journal->j_committing_transaction); in journal_flush()
1600 J_ASSERT(!journal->j_checkpoint_transactions); in journal_flush()
1601 J_ASSERT(journal->j_head == journal->j_tail); in journal_flush()
1602 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence); in journal_flush()
1603 spin_unlock(&journal->j_state_lock); in journal_flush()
1620 int journal_wipe(journal_t *journal, int write) in journal_wipe() argument
1624 J_ASSERT (!(journal->j_flags & JFS_LOADED)); in journal_wipe()
1626 err = load_superblock(journal); in journal_wipe()
1630 if (!journal->j_tail) in journal_wipe()
1636 err = journal_skip_recovery(journal); in journal_wipe()
1639 mutex_lock(&journal->j_checkpoint_mutex); in journal_wipe()
1640 mark_journal_empty(journal); in journal_wipe()
1641 mutex_unlock(&journal->j_checkpoint_mutex); in journal_wipe()
1653 static const char *journal_dev_name(journal_t *journal, char *buffer) in journal_dev_name() argument
1657 if (journal->j_inode) in journal_dev_name()
1658 bdev = journal->j_inode->i_sb->s_bdev; in journal_dev_name()
1660 bdev = journal->j_dev; in journal_dev_name()
1678 static void __journal_abort_hard(journal_t *journal) in __journal_abort_hard() argument
1683 if (journal->j_flags & JFS_ABORT) in __journal_abort_hard()
1687 journal_dev_name(journal, b)); in __journal_abort_hard()
1689 spin_lock(&journal->j_state_lock); in __journal_abort_hard()
1690 journal->j_flags |= JFS_ABORT; in __journal_abort_hard()
1691 transaction = journal->j_running_transaction; in __journal_abort_hard()
1693 __log_start_commit(journal, transaction->t_tid); in __journal_abort_hard()
1694 spin_unlock(&journal->j_state_lock); in __journal_abort_hard()
1699 static void __journal_abort_soft (journal_t *journal, int errno) in __journal_abort_soft() argument
1701 if (journal->j_flags & JFS_ABORT) in __journal_abort_soft()
1704 if (!journal->j_errno) in __journal_abort_soft()
1705 journal->j_errno = errno; in __journal_abort_soft()
1707 __journal_abort_hard(journal); in __journal_abort_soft()
1710 journal_update_sb_errno(journal); in __journal_abort_soft()
1759 void journal_abort(journal_t *journal, int errno) in journal_abort() argument
1761 __journal_abort_soft(journal, errno); in journal_abort()
1775 int journal_errno(journal_t *journal) in journal_errno() argument
1779 spin_lock(&journal->j_state_lock); in journal_errno()
1780 if (journal->j_flags & JFS_ABORT) in journal_errno()
1783 err = journal->j_errno; in journal_errno()
1784 spin_unlock(&journal->j_state_lock); in journal_errno()
1795 int journal_clear_err(journal_t *journal) in journal_clear_err() argument
1799 spin_lock(&journal->j_state_lock); in journal_clear_err()
1800 if (journal->j_flags & JFS_ABORT) in journal_clear_err()
1803 journal->j_errno = 0; in journal_clear_err()
1804 spin_unlock(&journal->j_state_lock); in journal_clear_err()
1815 void journal_ack_err(journal_t *journal) in journal_ack_err() argument
1817 spin_lock(&journal->j_state_lock); in journal_ack_err()
1818 if (journal->j_errno) in journal_ack_err()
1819 journal->j_flags |= JFS_ACK_ERR; in journal_ack_err()
1820 spin_unlock(&journal->j_state_lock); in journal_ack_err()