Lines Matching refs:log

62 #define	xlog_recover_check_summary(log)  argument
88 struct xlog *log, in xlog_buf_bbcount_valid() argument
91 return bbcount > 0 && bbcount <= log->l_logBBsize; in xlog_buf_bbcount_valid()
101 struct xlog *log, in xlog_get_bp() argument
106 if (!xlog_buf_bbcount_valid(log, nbblks)) { in xlog_get_bp()
107 xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer", in xlog_get_bp()
109 XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); in xlog_get_bp()
129 if (nbblks > 1 && log->l_sectBBsize > 1) in xlog_get_bp()
130 nbblks += log->l_sectBBsize; in xlog_get_bp()
131 nbblks = round_up(nbblks, log->l_sectBBsize); in xlog_get_bp()
133 bp = xfs_buf_get_uncached(log->l_mp->m_logdev_targp, nbblks, 0); in xlog_get_bp()
152 struct xlog *log, in xlog_align() argument
157 xfs_daddr_t offset = blk_no & ((xfs_daddr_t)log->l_sectBBsize - 1); in xlog_align()
169 struct xlog *log, in xlog_bread_noalign() argument
176 if (!xlog_buf_bbcount_valid(log, nbblks)) { in xlog_bread_noalign()
177 xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer", in xlog_bread_noalign()
179 XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); in xlog_bread_noalign()
183 blk_no = round_down(blk_no, log->l_sectBBsize); in xlog_bread_noalign()
184 nbblks = round_up(nbblks, log->l_sectBBsize); in xlog_bread_noalign()
189 XFS_BUF_SET_ADDR(bp, log->l_logBBstart + blk_no); in xlog_bread_noalign()
195 if (error && !XFS_FORCED_SHUTDOWN(log->l_mp)) in xlog_bread_noalign()
202 struct xlog *log, in xlog_bread() argument
210 error = xlog_bread_noalign(log, blk_no, nbblks, bp); in xlog_bread()
214 *offset = xlog_align(log, blk_no, nbblks, bp); in xlog_bread()
224 struct xlog *log, in xlog_bread_offset() argument
238 error = xlog_bread_noalign(log, blk_no, nbblks, bp); in xlog_bread_offset()
254 struct xlog *log, in xlog_bwrite() argument
261 if (!xlog_buf_bbcount_valid(log, nbblks)) { in xlog_bwrite()
262 xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer", in xlog_bwrite()
264 XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); in xlog_bwrite()
268 blk_no = round_down(blk_no, log->l_sectBBsize); in xlog_bwrite()
269 nbblks = round_up(nbblks, log->l_sectBBsize); in xlog_bwrite()
274 XFS_BUF_SET_ADDR(bp, log->l_logBBstart + blk_no); in xlog_bwrite()
393 struct xlog *log, in xlog_find_cycle_start() argument
408 error = xlog_bread(log, mid_blk, 1, bp, &offset); in xlog_find_cycle_start()
436 struct xlog *log, in xlog_find_verify_cycle() argument
456 while (bufblks > log->l_logBBsize) in xlog_find_verify_cycle()
458 while (!(bp = xlog_get_bp(log, bufblks))) { in xlog_find_verify_cycle()
460 if (bufblks < log->l_sectBBsize) in xlog_find_verify_cycle()
469 error = xlog_bread(log, i, bcount, bp, &buf); in xlog_find_verify_cycle()
505 struct xlog *log, in xlog_find_verify_log_record() argument
521 if (!(bp = xlog_get_bp(log, num_blks))) { in xlog_find_verify_log_record()
522 if (!(bp = xlog_get_bp(log, 1))) in xlog_find_verify_log_record()
526 error = xlog_bread(log, start_blk, num_blks, bp, &offset); in xlog_find_verify_log_record()
535 xfs_warn(log->l_mp, in xlog_find_verify_log_record()
543 error = xlog_bread(log, i, 1, bp, &offset); in xlog_find_verify_log_record()
571 if ((error = xlog_header_check_mount(log->l_mp, head))) in xlog_find_verify_log_record()
581 if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { in xlog_find_verify_log_record()
615 struct xlog *log, in xlog_find_head() argument
624 int error, log_bbnum = log->l_logBBsize; in xlog_find_head()
627 error = xlog_find_zeroed(log, &first_blk); in xlog_find_head()
629 xfs_warn(log->l_mp, "empty log check failed"); in xlog_find_head()
641 xfs_warn(log->l_mp, "totally zeroed log"); in xlog_find_head()
648 bp = xlog_get_bp(log, 1); in xlog_find_head()
652 error = xlog_bread(log, 0, 1, bp, &offset); in xlog_find_head()
659 error = xlog_bread(log, last_blk, 1, bp, &offset); in xlog_find_head()
729 if ((error = xlog_find_cycle_start(log, bp, first_blk, in xlog_find_head()
741 num_scan_bblks = XLOG_TOTAL_REC_SHIFT(log); in xlog_find_head()
748 if ((error = xlog_find_verify_cycle(log, in xlog_find_head()
785 if ((error = xlog_find_verify_cycle(log, start_blk, in xlog_find_head()
801 if ((error = xlog_find_verify_cycle(log, in xlog_find_head()
814 num_scan_bblks = XLOG_REC_SHIFT(log); in xlog_find_head()
819 error = xlog_find_verify_log_record(log, start_blk, &head_blk, 0); in xlog_find_head()
827 error = xlog_find_verify_log_record(log, start_blk, &head_blk, 0); in xlog_find_head()
837 error = xlog_find_verify_log_record(log, start_blk, in xlog_find_head()
866 xfs_warn(log->l_mp, "failed to find log head"); in xlog_find_head()
888 struct xlog *log, in xlog_find_tail() argument
907 if ((error = xlog_find_head(log, head_blk))) in xlog_find_tail()
910 bp = xlog_get_bp(log, 1); in xlog_find_tail()
914 error = xlog_bread(log, 0, 1, bp, &offset); in xlog_find_tail()
930 error = xlog_bread(log, i, 1, bp, &offset); in xlog_find_tail()
946 for (i = log->l_logBBsize - 1; i >= (int)(*head_blk); i--) { in xlog_find_tail()
947 error = xlog_bread(log, i, 1, bp, &offset); in xlog_find_tail()
959 xfs_warn(log->l_mp, "%s: couldn't find sync record", __func__); in xlog_find_tail()
979 log->l_prev_block = i; in xlog_find_tail()
980 log->l_curr_block = (int)*head_blk; in xlog_find_tail()
981 log->l_curr_cycle = be32_to_cpu(rhead->h_cycle); in xlog_find_tail()
983 log->l_curr_cycle++; in xlog_find_tail()
984 atomic64_set(&log->l_tail_lsn, be64_to_cpu(rhead->h_tail_lsn)); in xlog_find_tail()
985 atomic64_set(&log->l_last_sync_lsn, be64_to_cpu(rhead->h_lsn)); in xlog_find_tail()
986 xlog_assign_grant_head(&log->l_reserve_head.grant, log->l_curr_cycle, in xlog_find_tail()
987 BBTOB(log->l_curr_block)); in xlog_find_tail()
988 xlog_assign_grant_head(&log->l_write_head.grant, log->l_curr_cycle, in xlog_find_tail()
989 BBTOB(log->l_curr_block)); in xlog_find_tail()
1002 if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { in xlog_find_tail()
1018 BTOBB(be32_to_cpu(rhead->h_len))) % log->l_logBBsize; in xlog_find_tail()
1019 tail_lsn = atomic64_read(&log->l_tail_lsn); in xlog_find_tail()
1022 umount_data_blk = (i + hblks) % log->l_logBBsize; in xlog_find_tail()
1023 error = xlog_bread(log, umount_data_blk, 1, bp, &offset); in xlog_find_tail()
1034 xlog_assign_atomic_lsn(&log->l_tail_lsn, in xlog_find_tail()
1035 log->l_curr_cycle, after_umount_blk); in xlog_find_tail()
1036 xlog_assign_atomic_lsn(&log->l_last_sync_lsn, in xlog_find_tail()
1037 log->l_curr_cycle, after_umount_blk); in xlog_find_tail()
1046 log->l_mp->m_flags |= XFS_MOUNT_WAS_CLEAN; in xlog_find_tail()
1069 if (!xfs_readonly_buftarg(log->l_mp->m_logdev_targp)) in xlog_find_tail()
1070 error = xlog_clear_stale_blocks(log, tail_lsn); in xlog_find_tail()
1076 xfs_warn(log->l_mp, "failed to locate log tail"); in xlog_find_tail()
1098 struct xlog *log, in xlog_find_zeroed() argument
1106 int error, log_bbnum = log->l_logBBsize; in xlog_find_zeroed()
1111 bp = xlog_get_bp(log, 1); in xlog_find_zeroed()
1114 error = xlog_bread(log, 0, 1, bp, &offset); in xlog_find_zeroed()
1126 error = xlog_bread(log, log_bbnum-1, 1, bp, &offset); in xlog_find_zeroed()
1140 xfs_warn(log->l_mp, in xlog_find_zeroed()
1148 if ((error = xlog_find_cycle_start(log, bp, 0, &last_blk, 0))) in xlog_find_zeroed()
1157 num_scan_bblks = XLOG_TOTAL_REC_SHIFT(log); in xlog_find_zeroed()
1170 if ((error = xlog_find_verify_cycle(log, start_blk, in xlog_find_zeroed()
1180 error = xlog_find_verify_log_record(log, start_blk, &last_blk, 0); in xlog_find_zeroed()
1201 struct xlog *log, in xlog_add_record() argument
1214 xfs_sb_version_haslogv2(&log->l_mp->m_sb) ? 2 : 1); in xlog_add_record()
1218 memcpy(&recp->h_fs_uuid, &log->l_mp->m_sb.sb_uuid, sizeof(uuid_t)); in xlog_add_record()
1223 struct xlog *log, in xlog_write_log_records() argument
1233 int sectbb = log->l_sectBBsize; in xlog_write_log_records()
1246 while (bufblks > log->l_logBBsize) in xlog_write_log_records()
1248 while (!(bp = xlog_get_bp(log, bufblks))) { in xlog_write_log_records()
1260 error = xlog_bread_noalign(log, start_block, 1, bp); in xlog_write_log_records()
1280 error = xlog_bread_offset(log, ealign, sectbb, in xlog_write_log_records()
1287 offset = xlog_align(log, start_block, endcount, bp); in xlog_write_log_records()
1289 xlog_add_record(log, offset, cycle, i+j, in xlog_write_log_records()
1293 error = xlog_bwrite(log, start_block, endcount, bp); in xlog_write_log_records()
1323 struct xlog *log, in xlog_clear_stale_blocks() argument
1334 head_cycle = log->l_curr_cycle; in xlog_clear_stale_blocks()
1335 head_block = log->l_curr_block; in xlog_clear_stale_blocks()
1351 if (unlikely(head_block < tail_block || head_block >= log->l_logBBsize)) { in xlog_clear_stale_blocks()
1353 XFS_ERRLEVEL_LOW, log->l_mp); in xlog_clear_stale_blocks()
1356 tail_distance = tail_block + (log->l_logBBsize - head_block); in xlog_clear_stale_blocks()
1365 XFS_ERRLEVEL_LOW, log->l_mp); in xlog_clear_stale_blocks()
1380 max_distance = XLOG_TOTAL_REC_SHIFT(log); in xlog_clear_stale_blocks()
1390 if ((head_block + max_distance) <= log->l_logBBsize) { in xlog_clear_stale_blocks()
1398 error = xlog_write_log_records(log, (head_cycle - 1), in xlog_clear_stale_blocks()
1411 distance = log->l_logBBsize - head_block; in xlog_clear_stale_blocks()
1412 error = xlog_write_log_records(log, (head_cycle - 1), in xlog_clear_stale_blocks()
1427 distance = max_distance - (log->l_logBBsize - head_block); in xlog_clear_stale_blocks()
1428 error = xlog_write_log_records(log, head_cycle, 0, distance, in xlog_clear_stale_blocks()
1495 struct xlog *log, in xlog_recover_reorder_trans() argument
1517 trace_xfs_log_recover_item_reorder_head(log, in xlog_recover_reorder_trans()
1533 trace_xfs_log_recover_item_reorder_tail(log, in xlog_recover_reorder_trans()
1538 xfs_warn(log->l_mp, in xlog_recover_reorder_trans()
1579 struct xlog *log, in xlog_recover_buffer_pass1() argument
1590 trace_xfs_log_recover_buf_not_cancel(log, buf_f); in xlog_recover_buffer_pass1()
1598 bucket = XLOG_BUF_CANCEL_BUCKET(log, buf_f->blf_blkno); in xlog_recover_buffer_pass1()
1603 trace_xfs_log_recover_buf_cancel_ref_inc(log, buf_f); in xlog_recover_buffer_pass1()
1614 trace_xfs_log_recover_buf_cancel_add(log, buf_f); in xlog_recover_buffer_pass1()
1625 struct xlog *log, in xlog_peek_buffer_cancelled() argument
1633 if (!log->l_buf_cancel_table) { in xlog_peek_buffer_cancelled()
1639 bucket = XLOG_BUF_CANCEL_BUCKET(log, blkno); in xlog_peek_buffer_cancelled()
1665 struct xlog *log, in xlog_check_buffer_cancelled() argument
1672 bcp = xlog_peek_buffer_cancelled(log, blkno, len, flags); in xlog_check_buffer_cancelled()
2256 struct xlog *log, in xlog_recover_do_dquot_buffer() argument
2263 trace_xfs_log_recover_buf_dquot_buf(log, buf_f); in xlog_recover_do_dquot_buffer()
2281 if (log->l_quotaoffs_flag & type) in xlog_recover_do_dquot_buffer()
2313 struct xlog *log, in xlog_recover_buffer_pass2() argument
2319 xfs_mount_t *mp = log->l_mp; in xlog_recover_buffer_pass2()
2329 if (xlog_check_buffer_cancelled(log, buf_f->blf_blkno, in xlog_recover_buffer_pass2()
2331 trace_xfs_log_recover_buf_cancel(log, buf_f); in xlog_recover_buffer_pass2()
2335 trace_xfs_log_recover_buf_recover(log, buf_f); in xlog_recover_buffer_pass2()
2384 dirty = xlog_recover_do_dquot_buffer(mp, log, item, bp, buf_f); in xlog_recover_buffer_pass2()
2408 (BBTOB(bp->b_io_length) != MAX(log->l_mp->m_sb.sb_blocksize, in xlog_recover_buffer_pass2()
2409 (__uint32_t)log->l_mp->m_inode_cluster_size))) { in xlog_recover_buffer_pass2()
2501 struct xlog *log, in xlog_recover_inode_pass2() argument
2507 xfs_mount_t *mp = log->l_mp; in xlog_recover_inode_pass2()
2534 if (xlog_check_buffer_cancelled(log, in_f->ilf_blkno, in xlog_recover_inode_pass2()
2537 trace_xfs_log_recover_inode_cancel(log, in_f); in xlog_recover_inode_pass2()
2540 trace_xfs_log_recover_inode_recover(log, in_f); in xlog_recover_inode_pass2()
2591 trace_xfs_log_recover_inode_skip(log, in_f); in xlog_recover_inode_pass2()
2615 trace_xfs_log_recover_inode_skip(log, in_f); in xlog_recover_inode_pass2()
2765 xfs_warn(log->l_mp, "%s: Invalid flag", __func__); in xlog_recover_inode_pass2()
2777 xfs_dinode_calc_crc(log->l_mp, dip); in xlog_recover_inode_pass2()
2798 struct xlog *log, in xlog_recover_quotaoff_pass1() argument
2809 log->l_quotaoffs_flag |= XFS_DQ_USER; in xlog_recover_quotaoff_pass1()
2811 log->l_quotaoffs_flag |= XFS_DQ_PROJ; in xlog_recover_quotaoff_pass1()
2813 log->l_quotaoffs_flag |= XFS_DQ_GROUP; in xlog_recover_quotaoff_pass1()
2823 struct xlog *log, in xlog_recover_dquot_pass2() argument
2828 xfs_mount_t *mp = log->l_mp; in xlog_recover_dquot_pass2()
2844 xfs_alert(log->l_mp, "NULL dquot in %s.", __func__); in xlog_recover_dquot_pass2()
2848 xfs_alert(log->l_mp, "dquot too small (%d) in %s.", in xlog_recover_dquot_pass2()
2858 if (log->l_quotaoffs_flag & type) in xlog_recover_dquot_pass2()
2933 struct xlog *log, in xlog_recover_efi_pass2() argument
2938 xfs_mount_t *mp = log->l_mp; in xlog_recover_efi_pass2()
2952 spin_lock(&log->l_ailp->xa_lock); in xlog_recover_efi_pass2()
2956 xfs_trans_ail_update(log->l_ailp, &efip->efi_item, lsn); in xlog_recover_efi_pass2()
2971 struct xlog *log, in xlog_recover_efd_pass2() argument
2979 struct xfs_ail *ailp = log->l_ailp; in xlog_recover_efd_pass2()
3027 struct xlog *log, in xlog_recover_do_icreate_pass2() argument
3031 struct xfs_mount *mp = log->l_mp; in xlog_recover_do_icreate_pass2()
3041 xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad type"); in xlog_recover_do_icreate_pass2()
3046 xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad icl size"); in xlog_recover_do_icreate_pass2()
3052 xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad agno"); in xlog_recover_do_icreate_pass2()
3057 xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad agbno"); in xlog_recover_do_icreate_pass2()
3062 xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad isize"); in xlog_recover_do_icreate_pass2()
3067 xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad count"); in xlog_recover_do_icreate_pass2()
3072 xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad length"); in xlog_recover_do_icreate_pass2()
3081 xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad count 2"); in xlog_recover_do_icreate_pass2()
3095 if (xlog_check_buffer_cancelled(log, in xlog_recover_do_icreate_pass2()
3106 struct xlog *log, in xlog_recover_buffer_ra_pass2() argument
3110 struct xfs_mount *mp = log->l_mp; in xlog_recover_buffer_ra_pass2()
3112 if (xlog_peek_buffer_cancelled(log, buf_f->blf_blkno, in xlog_recover_buffer_ra_pass2()
3123 struct xlog *log, in xlog_recover_inode_ra_pass2() argument
3128 struct xfs_mount *mp = log->l_mp; in xlog_recover_inode_ra_pass2()
3141 if (xlog_peek_buffer_cancelled(log, ilfp->ilf_blkno, ilfp->ilf_len, 0)) in xlog_recover_inode_ra_pass2()
3150 struct xlog *log, in xlog_recover_dquot_ra_pass2() argument
3153 struct xfs_mount *mp = log->l_mp; in xlog_recover_dquot_ra_pass2()
3171 if (log->l_quotaoffs_flag & type) in xlog_recover_dquot_ra_pass2()
3179 if (xlog_peek_buffer_cancelled(log, dq_f->qlf_blkno, len, 0)) in xlog_recover_dquot_ra_pass2()
3188 struct xlog *log, in xlog_recover_ra_pass2() argument
3193 xlog_recover_buffer_ra_pass2(log, item); in xlog_recover_ra_pass2()
3196 xlog_recover_inode_ra_pass2(log, item); in xlog_recover_ra_pass2()
3199 xlog_recover_dquot_ra_pass2(log, item); in xlog_recover_ra_pass2()
3211 struct xlog *log, in xlog_recover_commit_pass1() argument
3215 trace_xfs_log_recover_item_recover(log, trans, item, XLOG_RECOVER_PASS1); in xlog_recover_commit_pass1()
3219 return xlog_recover_buffer_pass1(log, item); in xlog_recover_commit_pass1()
3221 return xlog_recover_quotaoff_pass1(log, item); in xlog_recover_commit_pass1()
3230 xfs_warn(log->l_mp, "%s: invalid item type (%d)", in xlog_recover_commit_pass1()
3239 struct xlog *log, in xlog_recover_commit_pass2() argument
3244 trace_xfs_log_recover_item_recover(log, trans, item, XLOG_RECOVER_PASS2); in xlog_recover_commit_pass2()
3248 return xlog_recover_buffer_pass2(log, buffer_list, item, in xlog_recover_commit_pass2()
3251 return xlog_recover_inode_pass2(log, buffer_list, item, in xlog_recover_commit_pass2()
3254 return xlog_recover_efi_pass2(log, item, trans->r_lsn); in xlog_recover_commit_pass2()
3256 return xlog_recover_efd_pass2(log, item); in xlog_recover_commit_pass2()
3258 return xlog_recover_dquot_pass2(log, buffer_list, item, in xlog_recover_commit_pass2()
3261 return xlog_recover_do_icreate_pass2(log, buffer_list, item); in xlog_recover_commit_pass2()
3266 xfs_warn(log->l_mp, "%s: invalid item type (%d)", in xlog_recover_commit_pass2()
3275 struct xlog *log, in xlog_recover_items_pass2() argument
3284 error = xlog_recover_commit_pass2(log, trans, in xlog_recover_items_pass2()
3301 struct xlog *log, in xlog_recover_commit_trans() argument
3318 error = xlog_recover_reorder_trans(log, trans, pass); in xlog_recover_commit_trans()
3325 error = xlog_recover_commit_pass1(log, trans, item); in xlog_recover_commit_trans()
3328 xlog_recover_ra_pass2(log, item); in xlog_recover_commit_trans()
3332 error = xlog_recover_items_pass2(log, trans, in xlog_recover_commit_trans()
3350 error = xlog_recover_items_pass2(log, trans, in xlog_recover_commit_trans()
3375 struct xlog *log, in xlog_recover_add_to_cont_trans() argument
3402 trace_xfs_log_recover_item_add_cont(log, trans, item, 0); in xlog_recover_add_to_cont_trans()
3421 struct xlog *log, in xlog_recover_add_to_trans() argument
3435 xfs_warn(log->l_mp, "%s: bad header magic number", in xlog_recover_add_to_trans()
3463 xfs_warn(log->l_mp, in xlog_recover_add_to_trans()
3481 trace_xfs_log_recover_item_add(log, trans, item, 0); in xlog_recover_add_to_trans()
3515 struct xlog *log, in xlog_recovery_process_trans() argument
3538 error = xlog_recover_add_to_trans(log, trans, dp, len); in xlog_recovery_process_trans()
3541 error = xlog_recover_add_to_cont_trans(log, trans, dp, len); in xlog_recovery_process_trans()
3544 error = xlog_recover_commit_trans(log, trans, pass); in xlog_recovery_process_trans()
3552 xfs_warn(log->l_mp, "%s: Unmount LR", __func__); in xlog_recovery_process_trans()
3557 xfs_warn(log->l_mp, "%s: bad flag 0x%x", __func__, flags); in xlog_recovery_process_trans()
3620 struct xlog *log, in xlog_recover_process_ophdr() argument
3634 xfs_warn(log->l_mp, "%s: bad clientid 0x%x", in xlog_recover_process_ophdr()
3645 xfs_warn(log->l_mp, "%s: bad length 0x%x", __func__, len); in xlog_recover_process_ophdr()
3656 return xlog_recovery_process_trans(log, trans, dp, len, in xlog_recover_process_ophdr()
3671 struct xlog *log, in xlog_recover_process_data() argument
3686 if (xlog_header_check_recover(log->l_mp, rhead)) in xlog_recover_process_data()
3696 error = xlog_recover_process_ophdr(log, rhash, rhead, ohead, in xlog_recover_process_data()
3792 struct xlog *log) in xlog_recover_process_efis() argument
3800 ailp = log->l_ailp; in xlog_recover_process_efis()
3826 error = xlog_recover_process_efi(log->l_mp, efip); in xlog_recover_process_efis()
3952 struct xlog *log) in xlog_recover_process_iunlinks() argument
3963 mp = log->l_mp; in xlog_recover_process_iunlinks()
4024 struct xlog *log) in xlog_unpack_data_crc() argument
4028 crc = xlog_cksum(log, rhead, dp, be32_to_cpu(rhead->h_len)); in xlog_unpack_data_crc()
4030 if (rhead->h_crc || xfs_sb_version_hascrc(&log->l_mp->m_sb)) { in xlog_unpack_data_crc()
4031 xfs_alert(log->l_mp, in xlog_unpack_data_crc()
4043 if (xfs_sb_version_hascrc(&log->l_mp->m_sb)) in xlog_unpack_data_crc()
4054 struct xlog *log) in xlog_unpack_data() argument
4059 error = xlog_unpack_data_crc(rhead, dp, log); in xlog_unpack_data()
4069 if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { in xlog_unpack_data()
4084 struct xlog *log, in xlog_valid_rec_header() argument
4092 XFS_ERRLEVEL_LOW, log->l_mp); in xlog_valid_rec_header()
4098 xfs_warn(log->l_mp, "%s: unrecognised log version (%d).", in xlog_valid_rec_header()
4107 XFS_ERRLEVEL_LOW, log->l_mp); in xlog_valid_rec_header()
4110 if (unlikely( blkno > log->l_logBBsize || blkno > INT_MAX )) { in xlog_valid_rec_header()
4112 XFS_ERRLEVEL_LOW, log->l_mp); in xlog_valid_rec_header()
4128 struct xlog *log, in xlog_do_recovery_pass() argument
4148 if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) { in xlog_do_recovery_pass()
4154 hbp = xlog_get_bp(log, 1); in xlog_do_recovery_pass()
4158 error = xlog_bread(log, tail_blk, 1, hbp, &offset); in xlog_do_recovery_pass()
4163 error = xlog_valid_rec_header(log, rhead, tail_blk); in xlog_do_recovery_pass()
4173 hbp = xlog_get_bp(log, hblks); in xlog_do_recovery_pass()
4178 ASSERT(log->l_sectBBsize == 1); in xlog_do_recovery_pass()
4180 hbp = xlog_get_bp(log, 1); in xlog_do_recovery_pass()
4186 dbp = xlog_get_bp(log, BTOBB(h_size)); in xlog_do_recovery_pass()
4200 while (blk_no < log->l_logBBsize) { in xlog_do_recovery_pass()
4207 if (blk_no + hblks <= log->l_logBBsize) { in xlog_do_recovery_pass()
4209 error = xlog_bread(log, blk_no, hblks, hbp, in xlog_do_recovery_pass()
4215 if (blk_no != log->l_logBBsize) { in xlog_do_recovery_pass()
4218 split_hblks = log->l_logBBsize - (int)blk_no; in xlog_do_recovery_pass()
4220 error = xlog_bread(log, blk_no, in xlog_do_recovery_pass()
4240 error = xlog_bread_offset(log, 0, in xlog_do_recovery_pass()
4247 error = xlog_valid_rec_header(log, rhead, in xlog_do_recovery_pass()
4256 if (blk_no + bblks <= log->l_logBBsize) { in xlog_do_recovery_pass()
4257 error = xlog_bread(log, blk_no, bblks, dbp, in xlog_do_recovery_pass()
4266 if (blk_no != log->l_logBBsize) { in xlog_do_recovery_pass()
4272 log->l_logBBsize - (int)blk_no; in xlog_do_recovery_pass()
4274 error = xlog_bread(log, blk_no, in xlog_do_recovery_pass()
4293 error = xlog_bread_offset(log, 0, in xlog_do_recovery_pass()
4300 error = xlog_unpack_data(rhead, offset, log); in xlog_do_recovery_pass()
4304 error = xlog_recover_process_data(log, rhash, in xlog_do_recovery_pass()
4311 ASSERT(blk_no >= log->l_logBBsize); in xlog_do_recovery_pass()
4312 blk_no -= log->l_logBBsize; in xlog_do_recovery_pass()
4317 error = xlog_bread(log, blk_no, hblks, hbp, &offset); in xlog_do_recovery_pass()
4322 error = xlog_valid_rec_header(log, rhead, blk_no); in xlog_do_recovery_pass()
4328 error = xlog_bread(log, blk_no+hblks, bblks, dbp, in xlog_do_recovery_pass()
4333 error = xlog_unpack_data(rhead, offset, log); in xlog_do_recovery_pass()
4337 error = xlog_recover_process_data(log, rhash, in xlog_do_recovery_pass()
4366 struct xlog *log, in xlog_do_log_recovery() argument
4378 log->l_buf_cancel_table = kmem_zalloc(XLOG_BC_TABLE_SIZE * in xlog_do_log_recovery()
4382 INIT_LIST_HEAD(&log->l_buf_cancel_table[i]); in xlog_do_log_recovery()
4384 error = xlog_do_recovery_pass(log, head_blk, tail_blk, in xlog_do_log_recovery()
4387 kmem_free(log->l_buf_cancel_table); in xlog_do_log_recovery()
4388 log->l_buf_cancel_table = NULL; in xlog_do_log_recovery()
4395 error = xlog_do_recovery_pass(log, head_blk, tail_blk, in xlog_do_log_recovery()
4402 ASSERT(list_empty(&log->l_buf_cancel_table[i])); in xlog_do_log_recovery()
4406 kmem_free(log->l_buf_cancel_table); in xlog_do_log_recovery()
4407 log->l_buf_cancel_table = NULL; in xlog_do_log_recovery()
4417 struct xlog *log, in xlog_do_recover() argument
4428 error = xlog_do_log_recovery(log, head_blk, tail_blk); in xlog_do_recover()
4435 if (XFS_FORCED_SHUTDOWN(log->l_mp)) { in xlog_do_recover()
4448 xlog_assign_tail_lsn(log->l_mp); in xlog_do_recover()
4454 bp = xfs_getsb(log->l_mp, 0); in xlog_do_recover()
4463 if (!XFS_FORCED_SHUTDOWN(log->l_mp)) { in xlog_do_recover()
4472 sbp = &log->l_mp->m_sb; in xlog_do_recover()
4476 xfs_reinit_percpu_counters(log->l_mp); in xlog_do_recover()
4481 xlog_recover_check_summary(log); in xlog_do_recover()
4484 log->l_flags &= ~XLOG_ACTIVE_RECOVERY; in xlog_do_recover()
4495 struct xlog *log) in xlog_recover() argument
4501 if ((error = xlog_find_tail(log, &head_blk, &tail_blk))) in xlog_recover()
4516 if ((error = xfs_dev_is_read_only(log->l_mp, "recovery"))) { in xlog_recover()
4527 if (XFS_SB_VERSION_NUM(&log->l_mp->m_sb) == XFS_SB_VERSION_5 && in xlog_recover()
4528 xfs_sb_has_incompat_log_feature(&log->l_mp->m_sb, in xlog_recover()
4530 xfs_warn(log->l_mp, in xlog_recover()
4534 (log->l_mp->m_sb.sb_features_log_incompat & in xlog_recover()
4545 xfs_notice(log->l_mp, in xlog_recover()
4551 xfs_notice(log->l_mp, "Starting recovery (logdev: %s)", in xlog_recover()
4552 log->l_mp->m_logname ? log->l_mp->m_logname in xlog_recover()
4555 error = xlog_do_recover(log, head_blk, tail_blk); in xlog_recover()
4556 log->l_flags |= XLOG_RECOVERY_NEEDED; in xlog_recover()
4572 struct xlog *log) in xlog_recover_finish() argument
4582 if (log->l_flags & XLOG_RECOVERY_NEEDED) { in xlog_recover_finish()
4584 error = xlog_recover_process_efis(log); in xlog_recover_finish()
4586 xfs_alert(log->l_mp, "Failed to recover EFIs"); in xlog_recover_finish()
4595 xfs_log_force(log->l_mp, XFS_LOG_SYNC); in xlog_recover_finish()
4597 xlog_recover_process_iunlinks(log); in xlog_recover_finish()
4599 xlog_recover_check_summary(log); in xlog_recover_finish()
4601 xfs_notice(log->l_mp, "Ending recovery (logdev: %s)", in xlog_recover_finish()
4602 log->l_mp->m_logname ? log->l_mp->m_logname in xlog_recover_finish()
4604 log->l_flags &= ~XLOG_RECOVERY_NEEDED; in xlog_recover_finish()
4606 xfs_info(log->l_mp, "Ending clean mount"); in xlog_recover_finish()
4619 struct xlog *log) in xlog_recover_check_summary() argument
4631 mp = log->l_mp; in xlog_recover_check_summary()