Lines Matching refs:log
44 #define xlog_recover_check_summary(log) argument
61 struct xlog *log, in xlog_verify_bno() argument
65 if (blk_no < 0 || blk_no >= log->l_logBBsize) in xlog_verify_bno()
67 if (bbcount <= 0 || (blk_no + bbcount) > log->l_logBBsize) in xlog_verify_bno()
78 struct xlog *log, in xlog_alloc_buffer() argument
81 int align_mask = xfs_buftarg_dma_alignment(log->l_targ); in xlog_alloc_buffer()
87 if (XFS_IS_CORRUPT(log->l_mp, !xlog_verify_bno(log, 0, nbblks))) { in xlog_alloc_buffer()
88 xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer", in xlog_alloc_buffer()
107 if (nbblks > 1 && log->l_sectBBsize > 1) in xlog_alloc_buffer()
108 nbblks += log->l_sectBBsize; in xlog_alloc_buffer()
109 nbblks = round_up(nbblks, log->l_sectBBsize); in xlog_alloc_buffer()
119 struct xlog *log, in xlog_align() argument
122 return BBTOB(blk_no & ((xfs_daddr_t)log->l_sectBBsize - 1)); in xlog_align()
127 struct xlog *log, in xlog_do_io() argument
135 if (XFS_IS_CORRUPT(log->l_mp, !xlog_verify_bno(log, blk_no, nbblks))) { in xlog_do_io()
136 xfs_warn(log->l_mp, in xlog_do_io()
142 blk_no = round_down(blk_no, log->l_sectBBsize); in xlog_do_io()
143 nbblks = round_up(nbblks, log->l_sectBBsize); in xlog_do_io()
146 error = xfs_rw_bdev(log->l_targ->bt_bdev, log->l_logBBstart + blk_no, in xlog_do_io()
148 if (error && !XFS_FORCED_SHUTDOWN(log->l_mp)) { in xlog_do_io()
149 xfs_alert(log->l_mp, in xlog_do_io()
159 struct xlog *log, in xlog_bread_noalign() argument
164 return xlog_do_io(log, blk_no, nbblks, data, REQ_OP_READ); in xlog_bread_noalign()
169 struct xlog *log, in xlog_bread() argument
177 error = xlog_do_io(log, blk_no, nbblks, data, REQ_OP_READ); in xlog_bread()
179 *offset = data + xlog_align(log, blk_no); in xlog_bread()
185 struct xlog *log, in xlog_bwrite() argument
190 return xlog_do_io(log, blk_no, nbblks, data, REQ_OP_WRITE); in xlog_bwrite()
276 struct xlog *log, in xlog_find_cycle_start() argument
291 error = xlog_bread(log, mid_blk, 1, buffer, &offset); in xlog_find_cycle_start()
319 struct xlog *log, in xlog_find_verify_cycle() argument
339 while (bufblks > log->l_logBBsize) in xlog_find_verify_cycle()
341 while (!(buffer = xlog_alloc_buffer(log, bufblks))) { in xlog_find_verify_cycle()
343 if (bufblks < log->l_sectBBsize) in xlog_find_verify_cycle()
352 error = xlog_bread(log, i, bcount, buffer, &buf); in xlog_find_verify_cycle()
375 xlog_logrec_hblks(struct xlog *log, struct xlog_rec_header *rh) in xlog_logrec_hblks() argument
377 if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { in xlog_logrec_hblks()
401 struct xlog *log, in xlog_find_verify_log_record() argument
417 buffer = xlog_alloc_buffer(log, num_blks); in xlog_find_verify_log_record()
419 buffer = xlog_alloc_buffer(log, 1); in xlog_find_verify_log_record()
424 error = xlog_bread(log, start_blk, num_blks, buffer, &offset); in xlog_find_verify_log_record()
433 xfs_warn(log->l_mp, in xlog_find_verify_log_record()
441 error = xlog_bread(log, i, 1, buffer, &offset); in xlog_find_verify_log_record()
469 if ((error = xlog_header_check_mount(log->l_mp, head))) in xlog_find_verify_log_record()
479 xhdrs = xlog_logrec_hblks(log, head); in xlog_find_verify_log_record()
505 struct xlog *log, in xlog_find_head() argument
514 int error, log_bbnum = log->l_logBBsize; in xlog_find_head()
517 error = xlog_find_zeroed(log, &first_blk); in xlog_find_head()
519 xfs_warn(log->l_mp, "empty log check failed"); in xlog_find_head()
531 xfs_warn(log->l_mp, "totally zeroed log"); in xlog_find_head()
538 buffer = xlog_alloc_buffer(log, 1); in xlog_find_head()
542 error = xlog_bread(log, 0, 1, buffer, &offset); in xlog_find_head()
549 error = xlog_bread(log, last_blk, 1, buffer, &offset); in xlog_find_head()
619 error = xlog_find_cycle_start(log, buffer, first_blk, &head_blk, in xlog_find_head()
632 num_scan_bblks = min_t(int, log_bbnum, XLOG_TOTAL_REC_SHIFT(log)); in xlog_find_head()
639 if ((error = xlog_find_verify_cycle(log, in xlog_find_head()
676 if ((error = xlog_find_verify_cycle(log, start_blk, in xlog_find_head()
692 if ((error = xlog_find_verify_cycle(log, in xlog_find_head()
705 num_scan_bblks = XLOG_REC_SHIFT(log); in xlog_find_head()
710 error = xlog_find_verify_log_record(log, start_blk, &head_blk, 0); in xlog_find_head()
718 error = xlog_find_verify_log_record(log, start_blk, &head_blk, 0); in xlog_find_head()
728 error = xlog_find_verify_log_record(log, start_blk, in xlog_find_head()
756 xfs_warn(log->l_mp, "failed to find log head"); in xlog_find_head()
770 struct xlog *log, in xlog_rseek_logrec_hdr() argument
793 error = xlog_bread(log, i, 1, buffer, &offset); in xlog_rseek_logrec_hdr()
811 for (i = log->l_logBBsize - 1; i >= (int) tail_blk; i--) { in xlog_rseek_logrec_hdr()
812 error = xlog_bread(log, i, 1, buffer, &offset); in xlog_rseek_logrec_hdr()
844 struct xlog *log, in xlog_seek_logrec_hdr() argument
865 end_blk = head_blk > tail_blk ? head_blk : log->l_logBBsize - 1; in xlog_seek_logrec_hdr()
867 error = xlog_bread(log, i, 1, buffer, &offset); in xlog_seek_logrec_hdr()
885 error = xlog_bread(log, i, 1, buffer, &offset); in xlog_seek_logrec_hdr()
911 struct xlog *log, in xlog_tail_distance() argument
918 return tail_blk + (log->l_logBBsize - head_blk); in xlog_tail_distance()
942 struct xlog *log, in xlog_verify_tail() argument
955 buffer = xlog_alloc_buffer(log, 1); in xlog_verify_tail()
963 error = xlog_seek_logrec_hdr(log, head_blk, *tail_blk, 1, buffer, in xlog_verify_tail()
978 error = xlog_do_recovery_pass(log, head_blk, *tail_blk, in xlog_verify_tail()
987 tail_distance = xlog_tail_distance(log, head_blk, first_bad); in xlog_verify_tail()
992 error = xlog_seek_logrec_hdr(log, head_blk, first_bad, 2, in xlog_verify_tail()
999 error = xlog_do_recovery_pass(log, head_blk, *tail_blk, in xlog_verify_tail()
1004 xfs_warn(log->l_mp, in xlog_verify_tail()
1027 struct xlog *log, in xlog_verify_head() argument
1049 tmp_buffer = xlog_alloc_buffer(log, 1); in xlog_verify_head()
1052 error = xlog_rseek_logrec_hdr(log, *head_blk, *tail_blk, in xlog_verify_head()
1064 error = xlog_do_recovery_pass(log, *head_blk, tmp_rhead_blk, in xlog_verify_head()
1072 xfs_warn(log->l_mp, in xlog_verify_head()
1084 found = xlog_rseek_logrec_hdr(log, first_bad, *tail_blk, 1, in xlog_verify_head()
1110 return xlog_verify_tail(log, *head_blk, tail_blk, in xlog_verify_head()
1124 struct xlog *log, in xlog_wrap_logbno() argument
1129 div_s64_rem(bno, log->l_logBBsize, &mod); in xlog_wrap_logbno()
1140 struct xlog *log, in xlog_check_unmount_rec() argument
1166 hblks = xlog_logrec_hblks(log, rhead); in xlog_check_unmount_rec()
1167 after_umount_blk = xlog_wrap_logbno(log, in xlog_check_unmount_rec()
1172 umount_data_blk = xlog_wrap_logbno(log, rhead_blk + hblks); in xlog_check_unmount_rec()
1173 error = xlog_bread(log, umount_data_blk, 1, buffer, &offset); in xlog_check_unmount_rec()
1184 xlog_assign_atomic_lsn(&log->l_tail_lsn, in xlog_check_unmount_rec()
1185 log->l_curr_cycle, after_umount_blk); in xlog_check_unmount_rec()
1186 xlog_assign_atomic_lsn(&log->l_last_sync_lsn, in xlog_check_unmount_rec()
1187 log->l_curr_cycle, after_umount_blk); in xlog_check_unmount_rec()
1199 struct xlog *log, in xlog_set_state() argument
1215 log->l_prev_block = rhead_blk; in xlog_set_state()
1216 log->l_curr_block = (int)head_blk; in xlog_set_state()
1217 log->l_curr_cycle = be32_to_cpu(rhead->h_cycle); in xlog_set_state()
1219 log->l_curr_cycle++; in xlog_set_state()
1220 atomic64_set(&log->l_tail_lsn, be64_to_cpu(rhead->h_tail_lsn)); in xlog_set_state()
1221 atomic64_set(&log->l_last_sync_lsn, be64_to_cpu(rhead->h_lsn)); in xlog_set_state()
1222 xlog_assign_grant_head(&log->l_reserve_head.grant, log->l_curr_cycle, in xlog_set_state()
1223 BBTOB(log->l_curr_block)); in xlog_set_state()
1224 xlog_assign_grant_head(&log->l_write_head.grant, log->l_curr_cycle, in xlog_set_state()
1225 BBTOB(log->l_curr_block)); in xlog_set_state()
1246 struct xlog *log, in xlog_find_tail() argument
1262 if ((error = xlog_find_head(log, head_blk))) in xlog_find_tail()
1266 buffer = xlog_alloc_buffer(log, 1); in xlog_find_tail()
1270 error = xlog_bread(log, 0, 1, buffer, &offset); in xlog_find_tail()
1286 error = xlog_rseek_logrec_hdr(log, *head_blk, *head_blk, 1, buffer, in xlog_find_tail()
1291 xfs_warn(log->l_mp, "%s: couldn't find sync record", __func__); in xlog_find_tail()
1300 xlog_set_state(log, *head_blk, rhead, rhead_blk, wrapped); in xlog_find_tail()
1301 tail_lsn = atomic64_read(&log->l_tail_lsn); in xlog_find_tail()
1307 error = xlog_check_unmount_rec(log, head_blk, tail_blk, rhead, in xlog_find_tail()
1325 error = xlog_verify_head(log, head_blk, tail_blk, buffer, in xlog_find_tail()
1332 xlog_set_state(log, *head_blk, rhead, rhead_blk, in xlog_find_tail()
1334 tail_lsn = atomic64_read(&log->l_tail_lsn); in xlog_find_tail()
1335 error = xlog_check_unmount_rec(log, head_blk, tail_blk, in xlog_find_tail()
1349 log->l_mp->m_flags |= XFS_MOUNT_WAS_CLEAN; in xlog_find_tail()
1370 if (!xfs_readonly_buftarg(log->l_targ)) in xlog_find_tail()
1371 error = xlog_clear_stale_blocks(log, tail_lsn); in xlog_find_tail()
1377 xfs_warn(log->l_mp, "failed to locate log tail"); in xlog_find_tail()
1399 struct xlog *log, in xlog_find_zeroed() argument
1407 int error, log_bbnum = log->l_logBBsize; in xlog_find_zeroed()
1412 buffer = xlog_alloc_buffer(log, 1); in xlog_find_zeroed()
1415 error = xlog_bread(log, 0, 1, buffer, &offset); in xlog_find_zeroed()
1427 error = xlog_bread(log, log_bbnum-1, 1, buffer, &offset); in xlog_find_zeroed()
1439 error = xlog_find_cycle_start(log, buffer, 0, &last_blk, 0); in xlog_find_zeroed()
1449 num_scan_bblks = XLOG_TOTAL_REC_SHIFT(log); in xlog_find_zeroed()
1462 if ((error = xlog_find_verify_cycle(log, start_blk, in xlog_find_zeroed()
1472 error = xlog_find_verify_log_record(log, start_blk, &last_blk, 0); in xlog_find_zeroed()
1493 struct xlog *log, in xlog_add_record() argument
1506 xfs_sb_version_haslogv2(&log->l_mp->m_sb) ? 2 : 1); in xlog_add_record()
1510 memcpy(&recp->h_fs_uuid, &log->l_mp->m_sb.sb_uuid, sizeof(uuid_t)); in xlog_add_record()
1515 struct xlog *log, in xlog_write_log_records() argument
1525 int sectbb = log->l_sectBBsize; in xlog_write_log_records()
1538 while (bufblks > log->l_logBBsize) in xlog_write_log_records()
1540 while (!(buffer = xlog_alloc_buffer(log, bufblks))) { in xlog_write_log_records()
1552 error = xlog_bread_noalign(log, start_block, 1, buffer); in xlog_write_log_records()
1571 error = xlog_bread_noalign(log, ealign, sectbb, in xlog_write_log_records()
1578 offset = buffer + xlog_align(log, start_block); in xlog_write_log_records()
1580 xlog_add_record(log, offset, cycle, i+j, in xlog_write_log_records()
1584 error = xlog_bwrite(log, start_block, endcount, buffer); in xlog_write_log_records()
1614 struct xlog *log, in xlog_clear_stale_blocks() argument
1625 head_cycle = log->l_curr_cycle; in xlog_clear_stale_blocks()
1626 head_block = log->l_curr_block; in xlog_clear_stale_blocks()
1642 if (XFS_IS_CORRUPT(log->l_mp, in xlog_clear_stale_blocks()
1644 head_block >= log->l_logBBsize)) in xlog_clear_stale_blocks()
1646 tail_distance = tail_block + (log->l_logBBsize - head_block); in xlog_clear_stale_blocks()
1653 if (XFS_IS_CORRUPT(log->l_mp, in xlog_clear_stale_blocks()
1669 max_distance = XLOG_TOTAL_REC_SHIFT(log); in xlog_clear_stale_blocks()
1679 if ((head_block + max_distance) <= log->l_logBBsize) { in xlog_clear_stale_blocks()
1687 error = xlog_write_log_records(log, (head_cycle - 1), in xlog_clear_stale_blocks()
1700 distance = log->l_logBBsize - head_block; in xlog_clear_stale_blocks()
1701 error = xlog_write_log_records(log, (head_cycle - 1), in xlog_clear_stale_blocks()
1716 distance = max_distance - (log->l_logBBsize - head_block); in xlog_clear_stale_blocks()
1717 error = xlog_write_log_records(log, head_cycle, 0, distance, in xlog_clear_stale_blocks()
1732 struct xlog *log, in xlog_recover_release_intent() argument
1738 struct xfs_ail *ailp = log->l_ailp; in xlog_recover_release_intent()
1844 struct xlog *log, in xlog_recover_reorder_trans() argument
1862 xfs_warn(log->l_mp, in xlog_recover_reorder_trans()
1884 trace_xfs_log_recover_item_reorder_head(log, in xlog_recover_reorder_trans()
1892 trace_xfs_log_recover_item_reorder_tail(log, in xlog_recover_reorder_trans()
1913 struct xlog *log, in xlog_buf_readahead() argument
1918 if (!xlog_is_buffer_cancelled(log, blkno, len)) in xlog_buf_readahead()
1919 xfs_buf_readahead(log->l_mp->m_ddev_targp, blkno, len, ops); in xlog_buf_readahead()
1924 struct xlog *log, in xlog_recover_items_pass2() argument
1933 trace_xfs_log_recover_item_recover(log, trans, item, in xlog_recover_items_pass2()
1937 error = item->ri_ops->commit_pass2(log, buffer_list, in xlog_recover_items_pass2()
1954 struct xlog *log, in xlog_recover_commit_trans() argument
1970 error = xlog_recover_reorder_trans(log, trans, pass); in xlog_recover_commit_trans()
1975 trace_xfs_log_recover_item_recover(log, trans, item, pass); in xlog_recover_commit_trans()
1980 error = item->ri_ops->commit_pass1(log, item); in xlog_recover_commit_trans()
1984 item->ri_ops->ra_pass2(log, item); in xlog_recover_commit_trans()
1988 error = xlog_recover_items_pass2(log, trans, in xlog_recover_commit_trans()
2006 error = xlog_recover_items_pass2(log, trans, in xlog_recover_commit_trans()
2030 struct xlog *log, in xlog_recover_add_to_cont_trans() argument
2046 xfs_warn(log->l_mp, "%s: bad header length", __func__); in xlog_recover_add_to_cont_trans()
2068 trace_xfs_log_recover_item_add_cont(log, trans, item, 0); in xlog_recover_add_to_cont_trans()
2087 struct xlog *log, in xlog_recover_add_to_trans() argument
2101 xfs_warn(log->l_mp, "%s: bad header magic number", in xlog_recover_add_to_trans()
2108 xfs_warn(log->l_mp, "%s: bad header length", __func__); in xlog_recover_add_to_trans()
2142 xfs_warn(log->l_mp, in xlog_recover_add_to_trans()
2157 xfs_warn(log->l_mp, in xlog_recover_add_to_trans()
2169 trace_xfs_log_recover_item_add(log, trans, item, 0); in xlog_recover_add_to_trans()
2205 struct xlog *log, in xlog_recovery_process_trans() argument
2229 error = xlog_recover_add_to_trans(log, trans, dp, len); in xlog_recovery_process_trans()
2232 error = xlog_recover_add_to_cont_trans(log, trans, dp, len); in xlog_recovery_process_trans()
2235 error = xlog_recover_commit_trans(log, trans, pass, in xlog_recovery_process_trans()
2244 xfs_warn(log->l_mp, "%s: Unmount LR", __func__); in xlog_recovery_process_trans()
2249 xfs_warn(log->l_mp, "%s: bad flag 0x%x", __func__, flags); in xlog_recovery_process_trans()
2312 struct xlog *log, in xlog_recover_process_ophdr() argument
2328 xfs_warn(log->l_mp, "%s: bad clientid 0x%x", in xlog_recover_process_ophdr()
2339 xfs_warn(log->l_mp, "%s: bad length 0x%x", __func__, len); in xlog_recover_process_ophdr()
2373 if (log->l_recovery_lsn != trans->r_lsn && in xlog_recover_process_ophdr()
2378 log->l_recovery_lsn = trans->r_lsn; in xlog_recover_process_ophdr()
2381 return xlog_recovery_process_trans(log, trans, dp, len, in xlog_recover_process_ophdr()
2396 struct xlog *log, in xlog_recover_process_data() argument
2412 if (xlog_header_check_recover(log->l_mp, rhead)) in xlog_recover_process_data()
2415 trace_xfs_log_recover_record(log, rhead, pass); in xlog_recover_process_data()
2423 error = xlog_recover_process_ophdr(log, rhash, rhead, ohead, in xlog_recover_process_data()
2515 struct xlog *log) in xlog_recover_process_intents() argument
2526 ailp = log->l_ailp; in xlog_recover_process_intents()
2529 last_lsn = xlog_assign_lsn(log->l_curr_cycle, log->l_curr_block); in xlog_recover_process_intents()
2571 error = xlog_finish_defer_ops(log->l_mp, &capture_list); in xlog_recover_process_intents()
2577 xlog_abort_defer_ops(log->l_mp, &capture_list); in xlog_recover_process_intents()
2587 struct xlog *log) in xlog_recover_cancel_intents() argument
2593 ailp = log->l_ailp; in xlog_recover_cancel_intents()
2744 struct xlog *log) in xlog_recover_process_iunlinks() argument
2754 mp = log->l_mp; in xlog_recover_process_iunlinks()
2798 struct xlog *log) in xlog_unpack_data() argument
2808 if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { in xlog_unpack_data()
2824 struct xlog *log, in xlog_recover_process() argument
2834 crc = xlog_cksum(log, rhead, dp, be32_to_cpu(rhead->h_len)); in xlog_recover_process()
2856 if (old_crc || xfs_sb_version_hascrc(&log->l_mp->m_sb)) { in xlog_recover_process()
2857 xfs_alert(log->l_mp, in xlog_recover_process()
2868 if (xfs_sb_version_hascrc(&log->l_mp->m_sb)) { in xlog_recover_process()
2869 XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_LOW, log->l_mp); in xlog_recover_process()
2874 xlog_unpack_data(rhead, dp, log); in xlog_recover_process()
2876 return xlog_recover_process_data(log, rhash, rhead, dp, pass, in xlog_recover_process()
2882 struct xlog *log, in xlog_valid_rec_header() argument
2889 if (XFS_IS_CORRUPT(log->l_mp, in xlog_valid_rec_header()
2892 if (XFS_IS_CORRUPT(log->l_mp, in xlog_valid_rec_header()
2896 xfs_warn(log->l_mp, "%s: unrecognised log version (%d).", in xlog_valid_rec_header()
2906 if (XFS_IS_CORRUPT(log->l_mp, hlen <= 0 || hlen > bufsize)) in xlog_valid_rec_header()
2909 if (XFS_IS_CORRUPT(log->l_mp, in xlog_valid_rec_header()
2910 blkno > log->l_logBBsize || blkno > INT_MAX)) in xlog_valid_rec_header()
2925 struct xlog *log, in xlog_do_recovery_pass() argument
2954 if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { in xlog_do_recovery_pass()
2960 hbp = xlog_alloc_buffer(log, 1); in xlog_do_recovery_pass()
2964 error = xlog_bread(log, tail_blk, 1, hbp, &offset); in xlog_do_recovery_pass()
2983 if (h_len > h_size && h_len <= log->l_mp->m_logbsize && in xlog_do_recovery_pass()
2985 xfs_warn(log->l_mp, in xlog_do_recovery_pass()
2987 h_size, log->l_mp->m_logbsize); in xlog_do_recovery_pass()
2988 h_size = log->l_mp->m_logbsize; in xlog_do_recovery_pass()
2991 error = xlog_valid_rec_header(log, rhead, tail_blk, h_size); in xlog_do_recovery_pass()
2995 hblks = xlog_logrec_hblks(log, rhead); in xlog_do_recovery_pass()
2998 hbp = xlog_alloc_buffer(log, hblks); in xlog_do_recovery_pass()
3001 ASSERT(log->l_sectBBsize == 1); in xlog_do_recovery_pass()
3003 hbp = xlog_alloc_buffer(log, 1); in xlog_do_recovery_pass()
3009 dbp = xlog_alloc_buffer(log, BTOBB(h_size)); in xlog_do_recovery_pass()
3022 while (blk_no < log->l_logBBsize) { in xlog_do_recovery_pass()
3029 if (blk_no + hblks <= log->l_logBBsize) { in xlog_do_recovery_pass()
3031 error = xlog_bread(log, blk_no, hblks, hbp, in xlog_do_recovery_pass()
3037 if (blk_no != log->l_logBBsize) { in xlog_do_recovery_pass()
3040 split_hblks = log->l_logBBsize - (int)blk_no; in xlog_do_recovery_pass()
3042 error = xlog_bread(log, blk_no, in xlog_do_recovery_pass()
3062 error = xlog_bread_noalign(log, 0, in xlog_do_recovery_pass()
3069 error = xlog_valid_rec_header(log, rhead, in xlog_do_recovery_pass()
3084 if (blk_no + bblks <= log->l_logBBsize || in xlog_do_recovery_pass()
3085 blk_no >= log->l_logBBsize) { in xlog_do_recovery_pass()
3086 rblk_no = xlog_wrap_logbno(log, blk_no); in xlog_do_recovery_pass()
3087 error = xlog_bread(log, rblk_no, bblks, dbp, in xlog_do_recovery_pass()
3096 if (blk_no != log->l_logBBsize) { in xlog_do_recovery_pass()
3102 log->l_logBBsize - (int)blk_no; in xlog_do_recovery_pass()
3104 error = xlog_bread(log, blk_no, in xlog_do_recovery_pass()
3123 error = xlog_bread_noalign(log, 0, in xlog_do_recovery_pass()
3130 error = xlog_recover_process(log, rhash, rhead, offset, in xlog_do_recovery_pass()
3139 ASSERT(blk_no >= log->l_logBBsize); in xlog_do_recovery_pass()
3140 blk_no -= log->l_logBBsize; in xlog_do_recovery_pass()
3146 error = xlog_bread(log, blk_no, hblks, hbp, &offset); in xlog_do_recovery_pass()
3151 error = xlog_valid_rec_header(log, rhead, blk_no, h_size); in xlog_do_recovery_pass()
3157 error = xlog_bread(log, blk_no+hblks, bblks, dbp, in xlog_do_recovery_pass()
3162 error = xlog_recover_process(log, rhash, rhead, offset, pass, in xlog_do_recovery_pass()
3217 struct xlog *log, in xlog_do_log_recovery() argument
3229 log->l_buf_cancel_table = kmem_zalloc(XLOG_BC_TABLE_SIZE * in xlog_do_log_recovery()
3233 INIT_LIST_HEAD(&log->l_buf_cancel_table[i]); in xlog_do_log_recovery()
3235 error = xlog_do_recovery_pass(log, head_blk, tail_blk, in xlog_do_log_recovery()
3238 kmem_free(log->l_buf_cancel_table); in xlog_do_log_recovery()
3239 log->l_buf_cancel_table = NULL; in xlog_do_log_recovery()
3246 error = xlog_do_recovery_pass(log, head_blk, tail_blk, in xlog_do_log_recovery()
3253 ASSERT(list_empty(&log->l_buf_cancel_table[i])); in xlog_do_log_recovery()
3257 kmem_free(log->l_buf_cancel_table); in xlog_do_log_recovery()
3258 log->l_buf_cancel_table = NULL; in xlog_do_log_recovery()
3268 struct xlog *log, in xlog_do_recover() argument
3272 struct xfs_mount *mp = log->l_mp; in xlog_do_recover()
3277 trace_xfs_log_recover(log, head_blk, tail_blk); in xlog_do_recover()
3282 error = xlog_do_log_recovery(log, head_blk, tail_blk); in xlog_do_recover()
3332 xlog_recover_check_summary(log); in xlog_do_recover()
3335 log->l_flags &= ~XLOG_ACTIVE_RECOVERY; in xlog_do_recover()
3346 struct xlog *log) in xlog_recover() argument
3352 error = xlog_find_tail(log, &head_blk, &tail_blk); in xlog_recover()
3361 if (xfs_sb_version_hascrc(&log->l_mp->m_sb) && in xlog_recover()
3362 !xfs_log_check_lsn(log->l_mp, log->l_mp->m_sb.sb_lsn)) in xlog_recover()
3377 if ((error = xfs_dev_is_read_only(log->l_mp, "recovery"))) { in xlog_recover()
3388 if (XFS_SB_VERSION_NUM(&log->l_mp->m_sb) == XFS_SB_VERSION_5 && in xlog_recover()
3389 xfs_sb_has_incompat_log_feature(&log->l_mp->m_sb, in xlog_recover()
3391 xfs_warn(log->l_mp, in xlog_recover()
3393 (log->l_mp->m_sb.sb_features_log_incompat & in xlog_recover()
3395 xfs_warn(log->l_mp, in xlog_recover()
3397 xfs_warn(log->l_mp, in xlog_recover()
3408 xfs_notice(log->l_mp, in xlog_recover()
3414 xfs_notice(log->l_mp, "Starting recovery (logdev: %s)", in xlog_recover()
3415 log->l_mp->m_logname ? log->l_mp->m_logname in xlog_recover()
3418 error = xlog_do_recover(log, head_blk, tail_blk); in xlog_recover()
3419 log->l_flags |= XLOG_RECOVERY_NEEDED; in xlog_recover()
3435 struct xlog *log) in xlog_recover_finish() argument
3445 if (log->l_flags & XLOG_RECOVERY_NEEDED) { in xlog_recover_finish()
3447 error = xlog_recover_process_intents(log); in xlog_recover_finish()
3456 xlog_recover_cancel_intents(log); in xlog_recover_finish()
3457 xfs_alert(log->l_mp, "Failed to recover intents"); in xlog_recover_finish()
3467 xfs_log_force(log->l_mp, XFS_LOG_SYNC); in xlog_recover_finish()
3469 xlog_recover_process_iunlinks(log); in xlog_recover_finish()
3471 xlog_recover_check_summary(log); in xlog_recover_finish()
3473 xfs_notice(log->l_mp, "Ending recovery (logdev: %s)", in xlog_recover_finish()
3474 log->l_mp->m_logname ? log->l_mp->m_logname in xlog_recover_finish()
3476 log->l_flags &= ~XLOG_RECOVERY_NEEDED; in xlog_recover_finish()
3478 xfs_info(log->l_mp, "Ending clean mount"); in xlog_recover_finish()
3485 struct xlog *log) in xlog_recover_cancel() argument
3487 if (log->l_flags & XLOG_RECOVERY_NEEDED) in xlog_recover_cancel()
3488 xlog_recover_cancel_intents(log); in xlog_recover_cancel()
3498 struct xlog *log) in xlog_recover_check_summary() argument
3509 mp = log->l_mp; in xlog_recover_check_summary()