• Home
  • Raw
  • Download

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);
122 journal_t *journal = arg; in kjournald() local
129 setup_timer(&journal->j_commit_timer, commit_timeout, in kjournald()
135 journal->j_task = current; in kjournald()
136 wake_up(&journal->j_wait_done_commit); in kjournald()
139 journal->j_commit_interval / HZ); in kjournald()
144 spin_lock(&journal->j_state_lock); in kjournald()
147 if (journal->j_flags & JFS_UNMOUNT) in kjournald()
151 journal->j_commit_sequence, journal->j_commit_request); in kjournald()
153 if (journal->j_commit_sequence != journal->j_commit_request) { in kjournald()
155 spin_unlock(&journal->j_state_lock); in kjournald()
156 del_timer_sync(&journal->j_commit_timer); in kjournald()
157 journal_commit_transaction(journal); in kjournald()
158 spin_lock(&journal->j_state_lock); in kjournald()
162 wake_up(&journal->j_wait_done_commit); in kjournald()
170 spin_unlock(&journal->j_state_lock); in kjournald()
172 spin_lock(&journal->j_state_lock); in kjournald()
181 prepare_to_wait(&journal->j_wait_commit, &wait, in kjournald()
183 if (journal->j_commit_sequence != journal->j_commit_request) in kjournald()
185 transaction = journal->j_running_transaction; in kjournald()
189 if (journal->j_flags & JFS_UNMOUNT) in kjournald()
192 spin_unlock(&journal->j_state_lock); in kjournald()
194 spin_lock(&journal->j_state_lock); in kjournald()
196 finish_wait(&journal->j_wait_commit, &wait); in kjournald()
204 transaction = journal->j_running_transaction; in kjournald()
206 journal->j_commit_request = transaction->t_tid; in kjournald()
212 spin_unlock(&journal->j_state_lock); in kjournald()
213 del_timer_sync(&journal->j_commit_timer); in kjournald()
214 journal->j_task = NULL; in kjournald()
215 wake_up(&journal->j_wait_done_commit); in kjournald()
220 static int journal_start_thread(journal_t *journal) in journal_start_thread() argument
224 t = kthread_run(kjournald, journal, "kjournald"); in journal_start_thread()
228 wait_event(journal->j_wait_done_commit, journal->j_task != NULL); in journal_start_thread()
232 static void journal_kill_thread(journal_t *journal) in journal_kill_thread() argument
234 spin_lock(&journal->j_state_lock); in journal_kill_thread()
235 journal->j_flags |= JFS_UNMOUNT; in journal_kill_thread()
237 while (journal->j_task) { in journal_kill_thread()
238 wake_up(&journal->j_wait_commit); in journal_kill_thread()
239 spin_unlock(&journal->j_state_lock); in journal_kill_thread()
240 wait_event(journal->j_wait_done_commit, in journal_kill_thread()
241 journal->j_task == NULL); in journal_kill_thread()
242 spin_lock(&journal->j_state_lock); in journal_kill_thread()
244 spin_unlock(&journal->j_state_lock); in journal_kill_thread()
298 journal_t *journal = transaction->t_journal; in journal_write_metadata_buffer() local
392 spin_lock(&journal->j_list_lock); in journal_write_metadata_buffer()
394 spin_unlock(&journal->j_list_lock); in journal_write_metadata_buffer()
416 int __log_space_left(journal_t *journal) in __log_space_left() argument
418 int left = journal->j_free; in __log_space_left()
420 assert_spin_locked(&journal->j_state_lock); in __log_space_left()
440 int __log_start_commit(journal_t *journal, tid_t target) in __log_start_commit() argument
447 if (journal->j_commit_request != target && in __log_start_commit()
448 journal->j_running_transaction && in __log_start_commit()
449 journal->j_running_transaction->t_tid == target) { in __log_start_commit()
455 journal->j_commit_request = target; in __log_start_commit()
457 journal->j_commit_request, in __log_start_commit()
458 journal->j_commit_sequence); in __log_start_commit()
459 wake_up(&journal->j_wait_commit); in __log_start_commit()
461 } else if (!tid_geq(journal->j_commit_request, target)) in __log_start_commit()
466 journal->j_commit_request, journal->j_commit_sequence, in __log_start_commit()
467 target, journal->j_running_transaction ? in __log_start_commit()
468 journal->j_running_transaction->t_tid : 0); in __log_start_commit()
472 int log_start_commit(journal_t *journal, tid_t tid) in log_start_commit() argument
476 spin_lock(&journal->j_state_lock); in log_start_commit()
477 ret = __log_start_commit(journal, tid); in log_start_commit()
478 spin_unlock(&journal->j_state_lock); in log_start_commit()
492 int journal_force_commit_nested(journal_t *journal) in journal_force_commit_nested() argument
497 spin_lock(&journal->j_state_lock); in journal_force_commit_nested()
498 if (journal->j_running_transaction && !current->journal_info) { in journal_force_commit_nested()
499 transaction = journal->j_running_transaction; in journal_force_commit_nested()
500 __log_start_commit(journal, transaction->t_tid); in journal_force_commit_nested()
501 } else if (journal->j_committing_transaction) in journal_force_commit_nested()
502 transaction = journal->j_committing_transaction; in journal_force_commit_nested()
505 spin_unlock(&journal->j_state_lock); in journal_force_commit_nested()
510 spin_unlock(&journal->j_state_lock); in journal_force_commit_nested()
511 log_wait_commit(journal, tid); in journal_force_commit_nested()
520 int journal_start_commit(journal_t *journal, tid_t *ptid) in journal_start_commit() argument
524 spin_lock(&journal->j_state_lock); in journal_start_commit()
525 if (journal->j_running_transaction) { in journal_start_commit()
526 tid_t tid = journal->j_running_transaction->t_tid; in journal_start_commit()
528 __log_start_commit(journal, tid); in journal_start_commit()
534 } else if (journal->j_committing_transaction) { in journal_start_commit()
540 *ptid = journal->j_committing_transaction->t_tid; in journal_start_commit()
543 spin_unlock(&journal->j_state_lock); in journal_start_commit()
551 int log_wait_commit(journal_t *journal, tid_t tid) in log_wait_commit() argument
556 spin_lock(&journal->j_state_lock); in log_wait_commit()
557 if (!tid_geq(journal->j_commit_request, tid)) { in log_wait_commit()
560 __func__, journal->j_commit_request, tid); in log_wait_commit()
562 spin_unlock(&journal->j_state_lock); in log_wait_commit()
564 spin_lock(&journal->j_state_lock); in log_wait_commit()
569 if (!((journal->j_running_transaction && in log_wait_commit()
570 journal->j_running_transaction->t_tid == tid) || in log_wait_commit()
571 (journal->j_committing_transaction && in log_wait_commit()
572 journal->j_committing_transaction->t_tid == tid))) in log_wait_commit()
575 if (!tid_geq(journal->j_commit_waited, tid)) in log_wait_commit()
576 journal->j_commit_waited = tid; in log_wait_commit()
577 while (tid_gt(tid, journal->j_commit_sequence)) { in log_wait_commit()
579 tid, journal->j_commit_sequence); in log_wait_commit()
580 wake_up(&journal->j_wait_commit); in log_wait_commit()
581 spin_unlock(&journal->j_state_lock); in log_wait_commit()
582 wait_event(journal->j_wait_done_commit, in log_wait_commit()
583 !tid_gt(tid, journal->j_commit_sequence)); in log_wait_commit()
584 spin_lock(&journal->j_state_lock); in log_wait_commit()
587 spin_unlock(&journal->j_state_lock); in log_wait_commit()
589 if (unlikely(is_journal_aborted(journal))) { in log_wait_commit()
602 int journal_trans_will_send_data_barrier(journal_t *journal, tid_t tid) in journal_trans_will_send_data_barrier() argument
607 if (!(journal->j_flags & JFS_BARRIER)) in journal_trans_will_send_data_barrier()
609 spin_lock(&journal->j_state_lock); in journal_trans_will_send_data_barrier()
611 if (tid_geq(journal->j_commit_sequence, tid)) in journal_trans_will_send_data_barrier()
617 commit_trans = journal->j_committing_transaction; in journal_trans_will_send_data_barrier()
623 spin_unlock(&journal->j_state_lock); in journal_trans_will_send_data_barrier()
632 int journal_next_log_block(journal_t *journal, unsigned int *retp) in journal_next_log_block() argument
636 spin_lock(&journal->j_state_lock); in journal_next_log_block()
637 J_ASSERT(journal->j_free > 1); in journal_next_log_block()
639 blocknr = journal->j_head; in journal_next_log_block()
640 journal->j_head++; in journal_next_log_block()
641 journal->j_free--; in journal_next_log_block()
642 if (journal->j_head == journal->j_last) in journal_next_log_block()
643 journal->j_head = journal->j_first; in journal_next_log_block()
644 spin_unlock(&journal->j_state_lock); in journal_next_log_block()
645 return journal_bmap(journal, blocknr, retp); in journal_next_log_block()
655 int journal_bmap(journal_t *journal, unsigned int blocknr, in journal_bmap() argument
661 if (journal->j_inode) { in journal_bmap()
662 ret = bmap(journal->j_inode, blocknr); in journal_bmap()
672 bdevname(journal->j_dev, b)); in journal_bmap()
674 __journal_abort_soft(journal, err); in journal_bmap()
692 struct journal_head *journal_get_descriptor_buffer(journal_t *journal) in journal_get_descriptor_buffer() argument
698 err = journal_next_log_block(journal, &blocknr); in journal_get_descriptor_buffer()
703 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize); in journal_get_descriptor_buffer()
707 memset(bh->b_data, 0, journal->j_blocksize); in journal_get_descriptor_buffer()
725 journal_t *journal; in journal_init_common() local
728 journal = kzalloc(sizeof(*journal), GFP_KERNEL); in journal_init_common()
729 if (!journal) in journal_init_common()
732 init_waitqueue_head(&journal->j_wait_transaction_locked); in journal_init_common()
733 init_waitqueue_head(&journal->j_wait_logspace); in journal_init_common()
734 init_waitqueue_head(&journal->j_wait_done_commit); in journal_init_common()
735 init_waitqueue_head(&journal->j_wait_checkpoint); in journal_init_common()
736 init_waitqueue_head(&journal->j_wait_commit); in journal_init_common()
737 init_waitqueue_head(&journal->j_wait_updates); in journal_init_common()
738 mutex_init(&journal->j_checkpoint_mutex); in journal_init_common()
739 spin_lock_init(&journal->j_revoke_lock); in journal_init_common()
740 spin_lock_init(&journal->j_list_lock); in journal_init_common()
741 spin_lock_init(&journal->j_state_lock); in journal_init_common()
743 journal->j_commit_interval = (HZ * JBD_DEFAULT_MAX_COMMIT_AGE); in journal_init_common()
746 journal->j_flags = JFS_ABORT; in journal_init_common()
749 err = journal_init_revoke(journal, JOURNAL_REVOKE_DEFAULT_HASH); in journal_init_common()
751 kfree(journal); in journal_init_common()
754 return journal; in journal_init_common()
786 journal_t *journal = journal_init_common(); in journal_init_dev() local
790 if (!journal) in journal_init_dev()
794 journal->j_blocksize = blocksize; in journal_init_dev()
795 n = journal->j_blocksize / sizeof(journal_block_tag_t); in journal_init_dev()
796 journal->j_wbufsize = n; in journal_init_dev()
797 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL); in journal_init_dev()
798 if (!journal->j_wbuf) { in journal_init_dev()
803 journal->j_dev = bdev; in journal_init_dev()
804 journal->j_fs_dev = fs_dev; in journal_init_dev()
805 journal->j_blk_offset = start; in journal_init_dev()
806 journal->j_maxlen = len; in journal_init_dev()
808 bh = __getblk(journal->j_dev, start, journal->j_blocksize); in journal_init_dev()
815 journal->j_sb_buffer = bh; in journal_init_dev()
816 journal->j_superblock = (journal_superblock_t *)bh->b_data; in journal_init_dev()
818 return journal; in journal_init_dev()
820 kfree(journal->j_wbuf); in journal_init_dev()
821 kfree(journal); in journal_init_dev()
836 journal_t *journal = journal_init_common(); in journal_init_inode() local
841 if (!journal) in journal_init_inode()
844 journal->j_dev = journal->j_fs_dev = inode->i_sb->s_bdev; in journal_init_inode()
845 journal->j_inode = inode; in journal_init_inode()
848 journal, inode->i_sb->s_id, inode->i_ino, in journal_init_inode()
852 journal->j_maxlen = inode->i_size >> inode->i_sb->s_blocksize_bits; in journal_init_inode()
853 journal->j_blocksize = inode->i_sb->s_blocksize; in journal_init_inode()
856 n = journal->j_blocksize / sizeof(journal_block_tag_t); in journal_init_inode()
857 journal->j_wbufsize = n; in journal_init_inode()
858 journal->j_wbuf = kmalloc(n * sizeof(struct buffer_head*), GFP_KERNEL); in journal_init_inode()
859 if (!journal->j_wbuf) { in journal_init_inode()
865 err = journal_bmap(journal, 0, &blocknr); in journal_init_inode()
873 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize); in journal_init_inode()
880 journal->j_sb_buffer = bh; in journal_init_inode()
881 journal->j_superblock = (journal_superblock_t *)bh->b_data; in journal_init_inode()
883 return journal; in journal_init_inode()
885 kfree(journal->j_wbuf); in journal_init_inode()
886 kfree(journal); in journal_init_inode()
895 static void journal_fail_superblock (journal_t *journal) in journal_fail_superblock() argument
897 struct buffer_head *bh = journal->j_sb_buffer; in journal_fail_superblock()
899 journal->j_sb_buffer = NULL; in journal_fail_superblock()
909 static int journal_reset(journal_t *journal) in journal_reset() argument
911 journal_superblock_t *sb = journal->j_superblock; in journal_reset()
919 journal_fail_superblock(journal); in journal_reset()
923 journal->j_first = first; in journal_reset()
924 journal->j_last = last; in journal_reset()
926 journal->j_head = first; in journal_reset()
927 journal->j_tail = first; in journal_reset()
928 journal->j_free = last - first; in journal_reset()
930 journal->j_tail_sequence = journal->j_transaction_sequence; in journal_reset()
931 journal->j_commit_sequence = journal->j_transaction_sequence - 1; in journal_reset()
932 journal->j_commit_request = journal->j_commit_sequence; in journal_reset()
934 journal->j_max_transaction_buffers = journal->j_maxlen / 4; in journal_reset()
945 journal->j_tail, journal->j_tail_sequence, in journal_reset()
946 journal->j_errno); in journal_reset()
947 journal->j_flags |= JFS_FLUSHED; in journal_reset()
950 mutex_lock(&journal->j_checkpoint_mutex); in journal_reset()
957 journal_update_sb_log_tail(journal, in journal_reset()
958 journal->j_tail_sequence, in journal_reset()
959 journal->j_tail, in journal_reset()
961 mutex_unlock(&journal->j_checkpoint_mutex); in journal_reset()
963 return journal_start_thread(journal); in journal_reset()
974 int journal_create(journal_t *journal) in journal_create() argument
981 if (journal->j_maxlen < JFS_MIN_JOURNAL_BLOCKS) { in journal_create()
983 journal->j_maxlen); in journal_create()
984 journal_fail_superblock(journal); in journal_create()
988 if (journal->j_inode == NULL) { in journal_create()
1001 for (i = 0; i < journal->j_maxlen; i++) { in journal_create()
1002 err = journal_bmap(journal, i, &blocknr); in journal_create()
1005 bh = __getblk(journal->j_dev, blocknr, journal->j_blocksize); in journal_create()
1009 memset (bh->b_data, 0, journal->j_blocksize); in journal_create()
1018 sync_blockdev(journal->j_dev); in journal_create()
1022 sb = journal->j_superblock; in journal_create()
1027 sb->s_blocksize = cpu_to_be32(journal->j_blocksize); in journal_create()
1028 sb->s_maxlen = cpu_to_be32(journal->j_maxlen); in journal_create()
1031 journal->j_transaction_sequence = 1; in journal_create()
1033 journal->j_flags &= ~JFS_ABORT; in journal_create()
1034 journal->j_format_version = 2; in journal_create()
1036 return journal_reset(journal); in journal_create()
1039 static void journal_write_superblock(journal_t *journal, int write_op) in journal_write_superblock() argument
1041 struct buffer_head *bh = journal->j_sb_buffer; in journal_write_superblock()
1044 trace_journal_write_superblock(journal, write_op); in journal_write_superblock()
1045 if (!(journal->j_flags & JFS_BARRIER)) in journal_write_superblock()
1060 journal_dev_name(journal, b)); in journal_write_superblock()
1078 ret, journal_dev_name(journal, b)); in journal_write_superblock()
1092 void journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid, in journal_update_sb_log_tail() argument
1095 journal_superblock_t *sb = journal->j_superblock; in journal_update_sb_log_tail()
1097 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in journal_update_sb_log_tail()
1104 journal_write_superblock(journal, write_op); in journal_update_sb_log_tail()
1107 spin_lock(&journal->j_state_lock); in journal_update_sb_log_tail()
1109 journal->j_flags &= ~JFS_FLUSHED; in journal_update_sb_log_tail()
1110 spin_unlock(&journal->j_state_lock); in journal_update_sb_log_tail()
1120 static void mark_journal_empty(journal_t *journal) in mark_journal_empty() argument
1122 journal_superblock_t *sb = journal->j_superblock; in mark_journal_empty()
1124 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); in mark_journal_empty()
1125 spin_lock(&journal->j_state_lock); in mark_journal_empty()
1128 spin_unlock(&journal->j_state_lock); in mark_journal_empty()
1132 journal->j_tail_sequence); in mark_journal_empty()
1134 sb->s_sequence = cpu_to_be32(journal->j_tail_sequence); in mark_journal_empty()
1136 spin_unlock(&journal->j_state_lock); in mark_journal_empty()
1138 journal_write_superblock(journal, WRITE_FUA); in mark_journal_empty()
1140 spin_lock(&journal->j_state_lock); in mark_journal_empty()
1142 journal->j_flags |= JFS_FLUSHED; in mark_journal_empty()
1143 spin_unlock(&journal->j_state_lock); in mark_journal_empty()
1153 static void journal_update_sb_errno(journal_t *journal) in journal_update_sb_errno() argument
1155 journal_superblock_t *sb = journal->j_superblock; in journal_update_sb_errno()
1157 spin_lock(&journal->j_state_lock); in journal_update_sb_errno()
1159 journal->j_errno); in journal_update_sb_errno()
1160 sb->s_errno = cpu_to_be32(journal->j_errno); in journal_update_sb_errno()
1161 spin_unlock(&journal->j_state_lock); in journal_update_sb_errno()
1163 journal_write_superblock(journal, WRITE_SYNC); in journal_update_sb_errno()
1171 static int journal_get_superblock(journal_t *journal) in journal_get_superblock() argument
1177 bh = journal->j_sb_buffer; in journal_get_superblock()
1190 sb = journal->j_superblock; in journal_get_superblock()
1195 sb->s_blocksize != cpu_to_be32(journal->j_blocksize)) { in journal_get_superblock()
1202 journal->j_format_version = 1; in journal_get_superblock()
1205 journal->j_format_version = 2; in journal_get_superblock()
1212 if (be32_to_cpu(sb->s_maxlen) < journal->j_maxlen) in journal_get_superblock()
1213 journal->j_maxlen = be32_to_cpu(sb->s_maxlen); in journal_get_superblock()
1214 else if (be32_to_cpu(sb->s_maxlen) > journal->j_maxlen) { in journal_get_superblock()
1220 be32_to_cpu(sb->s_first) >= journal->j_maxlen) { in journal_get_superblock()
1230 journal_fail_superblock(journal); in journal_get_superblock()
1239 static int load_superblock(journal_t *journal) in load_superblock() argument
1244 err = journal_get_superblock(journal); in load_superblock()
1248 sb = journal->j_superblock; in load_superblock()
1250 journal->j_tail_sequence = be32_to_cpu(sb->s_sequence); in load_superblock()
1251 journal->j_tail = be32_to_cpu(sb->s_start); in load_superblock()
1252 journal->j_first = be32_to_cpu(sb->s_first); in load_superblock()
1253 journal->j_last = be32_to_cpu(sb->s_maxlen); in load_superblock()
1254 journal->j_errno = be32_to_cpu(sb->s_errno); in load_superblock()
1268 int journal_load(journal_t *journal) in journal_load() argument
1273 err = load_superblock(journal); in journal_load()
1277 sb = journal->j_superblock; in journal_load()
1281 if (journal->j_format_version >= 2) { in journal_load()
1294 if (journal_recover(journal)) in journal_load()
1300 if (journal_reset(journal)) in journal_load()
1303 journal->j_flags &= ~JFS_ABORT; in journal_load()
1304 journal->j_flags |= JFS_LOADED; in journal_load()
1320 int journal_destroy(journal_t *journal) in journal_destroy() argument
1326 journal_kill_thread(journal); in journal_destroy()
1329 if (journal->j_running_transaction) in journal_destroy()
1330 journal_commit_transaction(journal); in journal_destroy()
1335 mutex_lock(&journal->j_checkpoint_mutex); in journal_destroy()
1337 spin_lock(&journal->j_list_lock); in journal_destroy()
1338 while (journal->j_checkpoint_transactions != NULL) { in journal_destroy()
1339 spin_unlock(&journal->j_list_lock); in journal_destroy()
1340 log_do_checkpoint(journal); in journal_destroy()
1341 spin_lock(&journal->j_list_lock); in journal_destroy()
1344 J_ASSERT(journal->j_running_transaction == NULL); in journal_destroy()
1345 J_ASSERT(journal->j_committing_transaction == NULL); in journal_destroy()
1346 J_ASSERT(journal->j_checkpoint_transactions == NULL); in journal_destroy()
1347 spin_unlock(&journal->j_list_lock); in journal_destroy()
1349 if (journal->j_sb_buffer) { in journal_destroy()
1350 if (!is_journal_aborted(journal)) { in journal_destroy()
1351 journal->j_tail_sequence = in journal_destroy()
1352 ++journal->j_transaction_sequence; in journal_destroy()
1353 mark_journal_empty(journal); in journal_destroy()
1356 brelse(journal->j_sb_buffer); in journal_destroy()
1358 mutex_unlock(&journal->j_checkpoint_mutex); in journal_destroy()
1360 if (journal->j_inode) in journal_destroy()
1361 iput(journal->j_inode); in journal_destroy()
1362 if (journal->j_revoke) in journal_destroy()
1363 journal_destroy_revoke(journal); in journal_destroy()
1364 kfree(journal->j_wbuf); in journal_destroy()
1365 kfree(journal); in journal_destroy()
1382 int journal_check_used_features (journal_t *journal, unsigned long compat, in journal_check_used_features() argument
1389 if (journal->j_format_version == 1) in journal_check_used_features()
1392 sb = journal->j_superblock; in journal_check_used_features()
1413 int journal_check_available_features (journal_t *journal, unsigned long compat, in journal_check_available_features() argument
1423 if (journal->j_format_version != 2) in journal_check_available_features()
1446 int journal_set_features (journal_t *journal, unsigned long compat, in journal_set_features() argument
1451 if (journal_check_used_features(journal, compat, ro, incompat)) in journal_set_features()
1454 if (!journal_check_available_features(journal, compat, ro, incompat)) in journal_set_features()
1460 sb = journal->j_superblock; in journal_set_features()
1477 int journal_update_format (journal_t *journal) in journal_update_format() argument
1482 err = journal_get_superblock(journal); in journal_update_format()
1486 sb = journal->j_superblock; in journal_update_format()
1492 return journal_convert_superblock_v1(journal, sb); in journal_update_format()
1499 static int journal_convert_superblock_v1(journal_t *journal, in journal_convert_superblock_v1() argument
1515 journal->j_format_version = 2; in journal_convert_superblock_v1()
1517 bh = journal->j_sb_buffer; in journal_convert_superblock_v1()
1534 int journal_flush(journal_t *journal) in journal_flush() argument
1539 spin_lock(&journal->j_state_lock); in journal_flush()
1542 if (journal->j_running_transaction) { in journal_flush()
1543 transaction = journal->j_running_transaction; in journal_flush()
1544 __log_start_commit(journal, transaction->t_tid); in journal_flush()
1545 } else if (journal->j_committing_transaction) in journal_flush()
1546 transaction = journal->j_committing_transaction; in journal_flush()
1552 spin_unlock(&journal->j_state_lock); in journal_flush()
1553 log_wait_commit(journal, tid); in journal_flush()
1555 spin_unlock(&journal->j_state_lock); in journal_flush()
1559 spin_lock(&journal->j_list_lock); in journal_flush()
1560 while (!err && journal->j_checkpoint_transactions != NULL) { in journal_flush()
1561 spin_unlock(&journal->j_list_lock); in journal_flush()
1562 mutex_lock(&journal->j_checkpoint_mutex); in journal_flush()
1563 err = log_do_checkpoint(journal); in journal_flush()
1564 mutex_unlock(&journal->j_checkpoint_mutex); in journal_flush()
1565 spin_lock(&journal->j_list_lock); in journal_flush()
1567 spin_unlock(&journal->j_list_lock); in journal_flush()
1569 if (is_journal_aborted(journal)) in journal_flush()
1572 mutex_lock(&journal->j_checkpoint_mutex); in journal_flush()
1573 cleanup_journal_tail(journal); in journal_flush()
1580 mark_journal_empty(journal); in journal_flush()
1581 mutex_unlock(&journal->j_checkpoint_mutex); in journal_flush()
1582 spin_lock(&journal->j_state_lock); in journal_flush()
1583 J_ASSERT(!journal->j_running_transaction); in journal_flush()
1584 J_ASSERT(!journal->j_committing_transaction); in journal_flush()
1585 J_ASSERT(!journal->j_checkpoint_transactions); in journal_flush()
1586 J_ASSERT(journal->j_head == journal->j_tail); in journal_flush()
1587 J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence); in journal_flush()
1588 spin_unlock(&journal->j_state_lock); in journal_flush()
1605 int journal_wipe(journal_t *journal, int write) in journal_wipe() argument
1609 J_ASSERT (!(journal->j_flags & JFS_LOADED)); in journal_wipe()
1611 err = load_superblock(journal); in journal_wipe()
1615 if (!journal->j_tail) in journal_wipe()
1621 err = journal_skip_recovery(journal); in journal_wipe()
1624 mutex_lock(&journal->j_checkpoint_mutex); in journal_wipe()
1625 mark_journal_empty(journal); in journal_wipe()
1626 mutex_unlock(&journal->j_checkpoint_mutex); in journal_wipe()
1638 static const char *journal_dev_name(journal_t *journal, char *buffer) in journal_dev_name() argument
1642 if (journal->j_inode) in journal_dev_name()
1643 bdev = journal->j_inode->i_sb->s_bdev; in journal_dev_name()
1645 bdev = journal->j_dev; in journal_dev_name()
1663 static void __journal_abort_hard(journal_t *journal) in __journal_abort_hard() argument
1668 if (journal->j_flags & JFS_ABORT) in __journal_abort_hard()
1672 journal_dev_name(journal, b)); in __journal_abort_hard()
1674 spin_lock(&journal->j_state_lock); in __journal_abort_hard()
1675 journal->j_flags |= JFS_ABORT; in __journal_abort_hard()
1676 transaction = journal->j_running_transaction; in __journal_abort_hard()
1678 __log_start_commit(journal, transaction->t_tid); in __journal_abort_hard()
1679 spin_unlock(&journal->j_state_lock); in __journal_abort_hard()
1684 static void __journal_abort_soft (journal_t *journal, int errno) in __journal_abort_soft() argument
1686 if (journal->j_flags & JFS_ABORT) in __journal_abort_soft()
1689 if (!journal->j_errno) in __journal_abort_soft()
1690 journal->j_errno = errno; in __journal_abort_soft()
1692 __journal_abort_hard(journal); in __journal_abort_soft()
1695 journal_update_sb_errno(journal); in __journal_abort_soft()
1744 void journal_abort(journal_t *journal, int errno) in journal_abort() argument
1746 __journal_abort_soft(journal, errno); in journal_abort()
1760 int journal_errno(journal_t *journal) in journal_errno() argument
1764 spin_lock(&journal->j_state_lock); in journal_errno()
1765 if (journal->j_flags & JFS_ABORT) in journal_errno()
1768 err = journal->j_errno; in journal_errno()
1769 spin_unlock(&journal->j_state_lock); in journal_errno()
1780 int journal_clear_err(journal_t *journal) in journal_clear_err() argument
1784 spin_lock(&journal->j_state_lock); in journal_clear_err()
1785 if (journal->j_flags & JFS_ABORT) in journal_clear_err()
1788 journal->j_errno = 0; in journal_clear_err()
1789 spin_unlock(&journal->j_state_lock); in journal_clear_err()
1800 void journal_ack_err(journal_t *journal) in journal_ack_err() argument
1802 spin_lock(&journal->j_state_lock); in journal_ack_err()
1803 if (journal->j_errno) in journal_ack_err()
1804 journal->j_flags |= JFS_ACK_ERR; in journal_ack_err()
1805 spin_unlock(&journal->j_state_lock); in journal_ack_err()