From: Dave Chinner <dchinner@xxxxxxxxxx> Rather than passing a mix of xfs_mount and xlog (and sometimes both) through the call chain of buffer log item recovery, just pass the struct xlog and pull the xfs_mount from that only at the leaf functions where it is needed. This makes it all just a little cleaner. Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> --- fs/xfs/xfs_buf_item_recover.c | 94 +++++++++++++++++------------------ 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/fs/xfs/xfs_buf_item_recover.c b/fs/xfs/xfs_buf_item_recover.c index 9225baa62755..edd03b08c969 100644 --- a/fs/xfs/xfs_buf_item_recover.c +++ b/fs/xfs/xfs_buf_item_recover.c @@ -209,7 +209,7 @@ xlog_recover_buf_commit_pass1( */ static int xlog_recover_validate_buf_type( - struct xfs_mount *mp, + struct xlog *log, struct xfs_buf *bp, struct xfs_buf_log_format *buf_f, xfs_lsn_t current_lsn) @@ -228,7 +228,7 @@ xlog_recover_validate_buf_type( * inconsistent state resulting in verification failures. Hence for now * just avoid the verification stage for non-crc filesystems */ - if (!xfs_has_crc(mp)) + if (!xfs_has_crc(log->l_mp)) return 0; magic32 = be32_to_cpu(*(__be32 *)bp->b_addr); @@ -396,7 +396,7 @@ xlog_recover_validate_buf_type( break; #endif /* CONFIG_XFS_RT */ default: - xfs_warn(mp, "Unknown buffer type %d!", + xfs_warn(log->l_mp, "Unknown buffer type %d!", xfs_blft_from_flags(buf_f)); break; } @@ -410,7 +410,7 @@ xlog_recover_validate_buf_type( return 0; if (warnmsg) { - xfs_warn(mp, warnmsg); + xfs_warn(log->l_mp, warnmsg); xfs_buf_corruption_error(bp, __this_address); return -EFSCORRUPTED; } @@ -428,7 +428,7 @@ xlog_recover_validate_buf_type( */ ASSERT(bp->b_ops); bp->b_flags |= _XBF_LOGRECOVERY; - xfs_buf_item_init(bp, mp); + xfs_buf_item_init(bp, log->l_mp); bp->b_log_item->bli_item.li_lsn = current_lsn; return 0; } @@ -441,7 +441,7 @@ xlog_recover_validate_buf_type( */ static void xlog_recover_buffer( - struct xfs_mount *mp, + struct xlog *log, struct xlog_recover_item *item, struct xfs_buf *bp, struct xfs_buf_log_format *buf_f) @@ -450,7 +450,7 @@ xlog_recover_buffer( int bit; int nbits; - trace_xfs_log_recover_buf_reg_buf(mp->m_log, buf_f); + trace_xfs_log_recover_buf_reg_buf(log, buf_f); bit = 0; i = 1; /* 0 is the buf format structure */ @@ -492,14 +492,14 @@ xlog_recover_buffer( static int xlog_recover_do_reg_buffer( - struct xfs_mount *mp, + struct xlog *log, struct xlog_recover_item *item, struct xfs_buf *bp, struct xfs_buf_log_format *buf_f, xfs_lsn_t current_lsn) { - xlog_recover_buffer(mp, item, bp, buf_f); - return xlog_recover_validate_buf_type(mp, bp, buf_f, current_lsn); + xlog_recover_buffer(log, item, bp, buf_f); + return xlog_recover_validate_buf_type(log, bp, buf_f, current_lsn); } /* @@ -513,7 +513,6 @@ xlog_recover_do_reg_buffer( */ static bool xlog_recover_this_dquot_buffer( - struct xfs_mount *mp, struct xlog *log, struct xlog_recover_item *item, struct xfs_buf *bp, @@ -526,7 +525,7 @@ xlog_recover_this_dquot_buffer( /* * Filesystems are required to send in quota flags at mount time. */ - if (!mp->m_qflags) + if (!log->l_mp->m_qflags) return false; type = 0; @@ -550,7 +549,7 @@ xlog_recover_this_dquot_buffer( */ static int xlog_recover_verify_dquot_buf_item( - struct xfs_mount *mp, + struct xlog *log, struct xlog_recover_item *item, struct xfs_buf *bp, struct xfs_buf_log_format *buf_f) @@ -564,7 +563,7 @@ xlog_recover_verify_dquot_buf_item( case XFS_BLFT_GDQUOT_BUF: break; default: - xfs_alert(mp, + xfs_alert(log->l_mp, "XFS: dquot buffer log format type mismatch in %s.", __func__); xfs_buf_corruption_error(bp, __this_address); @@ -573,19 +572,19 @@ xlog_recover_verify_dquot_buf_item( for (i = 1; i < item->ri_total; i++) { if (item->ri_buf[i].i_addr == NULL) { - xfs_alert(mp, + xfs_alert(log->l_mp, "XFS: NULL dquot in %s.", __func__); return -EFSCORRUPTED; } if (item->ri_buf[i].i_len < sizeof(struct xfs_disk_dquot)) { - xfs_alert(mp, + xfs_alert(log->l_mp, "XFS: dquot too small (%d) in %s.", item->ri_buf[i].i_len, __func__); return -EFSCORRUPTED; } - fa = xfs_dquot_verify(mp, item->ri_buf[i].i_addr, -1); + fa = xfs_dquot_verify(log->l_mp, item->ri_buf[i].i_addr, -1); if (fa) { - xfs_alert(mp, + xfs_alert(log->l_mp, "dquot corrupt at %pS trying to replay into block 0x%llx", fa, xfs_buf_daddr(bp)); return -EFSCORRUPTED; @@ -612,11 +611,12 @@ xlog_recover_verify_dquot_buf_item( */ static int xlog_recover_do_inode_buffer( - struct xfs_mount *mp, + struct xlog *log, struct xlog_recover_item *item, struct xfs_buf *bp, struct xfs_buf_log_format *buf_f) { + struct xfs_sb *sbp = &log->l_mp->m_sb; int i; int item_index = 0; int bit = 0; @@ -628,7 +628,7 @@ xlog_recover_do_inode_buffer( xfs_agino_t *logged_nextp; xfs_agino_t *buffer_nextp; - trace_xfs_log_recover_buf_inode_buf(mp->m_log, buf_f); + trace_xfs_log_recover_buf_inode_buf(log, buf_f); /* * If the magic number doesn't match, something has gone wrong. Don't @@ -641,12 +641,12 @@ xlog_recover_do_inode_buffer( * Post recovery validation only works properly on CRC enabled * filesystems. */ - if (xfs_has_crc(mp)) + if (xfs_has_crc(log->l_mp)) bp->b_ops = &xfs_inode_buf_ops; - inodes_per_buf = BBTOB(bp->b_length) >> mp->m_sb.sb_inodelog; + inodes_per_buf = BBTOB(bp->b_length) >> sbp->sb_inodelog; for (i = 0; i < inodes_per_buf; i++) { - next_unlinked_offset = (i * mp->m_sb.sb_inodesize) + + next_unlinked_offset = (i * sbp->sb_inodesize) + offsetof(struct xfs_dinode, di_next_unlinked); while (next_unlinked_offset >= @@ -695,8 +695,8 @@ xlog_recover_do_inode_buffer( */ logged_nextp = item->ri_buf[item_index].i_addr + next_unlinked_offset - reg_buf_offset; - if (XFS_IS_CORRUPT(mp, *logged_nextp == 0)) { - xfs_alert(mp, + if (XFS_IS_CORRUPT(log->l_mp, *logged_nextp == 0)) { + xfs_alert(log->l_mp, "Bad inode buffer log record (ptr = "PTR_FMT", bp = "PTR_FMT"). " "Trying to replay bad (0) inode di_next_unlinked field.", item, bp); @@ -711,8 +711,8 @@ xlog_recover_do_inode_buffer( * have to leave the inode in a consistent state for whoever * reads it next.... */ - xfs_dinode_calc_crc(mp, - xfs_buf_offset(bp, i * mp->m_sb.sb_inodesize)); + xfs_dinode_calc_crc(log->l_mp, + xfs_buf_offset(bp, i * sbp->sb_inodesize)); } @@ -734,7 +734,7 @@ xlog_recover_do_inode_buffer( * it stale so that it won't be found on overlapping buffer lookups and * caller knows not to queue it for delayed write. */ - if (BBTOB(bp->b_length) != M_IGEO(mp)->inode_cluster_size) { + if (BBTOB(bp->b_length) != M_IGEO(log->l_mp)->inode_cluster_size) { int error; error = xfs_bwrite(bp); @@ -792,7 +792,7 @@ xlog_recovery_is_dir_buf( */ static void xlog_recover_do_partial_dabuf( - struct xfs_mount *mp, + struct xlog *log, struct xlog_recover_item *item, struct xfs_buf *bp, struct xfs_buf_log_format *buf_f) @@ -802,7 +802,7 @@ xlog_recover_do_partial_dabuf( * and rely on post pass2 recovery cache purge to clean these out of * memory. */ - xlog_recover_buffer(mp, item, bp, buf_f); + xlog_recover_buffer(log, item, bp, buf_f); } /* @@ -827,7 +827,7 @@ xlog_recover_do_partial_dabuf( */ static xfs_lsn_t xlog_recover_get_buf_lsn( - struct xfs_mount *mp, + struct xlog *log, struct xfs_buf *bp, struct xfs_buf_log_format *buf_f) { @@ -839,7 +839,7 @@ xlog_recover_get_buf_lsn( uint16_t blft; /* v4 filesystems always recover immediately */ - if (!xfs_has_crc(mp)) + if (!xfs_has_crc(log->l_mp)) goto recover_immediately; /* @@ -916,7 +916,7 @@ xlog_recover_get_buf_lsn( * the relevant UUID in the superblock. */ lsn = be64_to_cpu(((struct xfs_dsb *)blk)->sb_lsn); - if (xfs_has_metauuid(mp)) + if (xfs_has_metauuid(log->l_mp)) uuid = &((struct xfs_dsb *)blk)->sb_meta_uuid; else uuid = &((struct xfs_dsb *)blk)->sb_uuid; @@ -926,7 +926,7 @@ xlog_recover_get_buf_lsn( } if (lsn != (xfs_lsn_t)-1) { - if (!uuid_equal(&mp->m_sb.sb_meta_uuid, uuid)) + if (!uuid_equal(&log->l_mp->m_sb.sb_meta_uuid, uuid)) goto recover_immediately; return lsn; } @@ -945,7 +945,7 @@ xlog_recover_get_buf_lsn( } if (lsn != (xfs_lsn_t)-1) { - if (!uuid_equal(&mp->m_sb.sb_meta_uuid, uuid)) + if (!uuid_equal(&log->l_mp->m_sb.sb_meta_uuid, uuid)) goto recover_immediately; return lsn; } @@ -977,14 +977,14 @@ xlog_recover_get_buf_lsn( */ static bool xlog_recover_this_buffer( - struct xfs_mount *mp, + struct xlog *log, struct xfs_buf *bp, struct xfs_buf_log_format *buf_f, xfs_lsn_t current_lsn) { xfs_lsn_t lsn; - lsn = xlog_recover_get_buf_lsn(mp, bp, buf_f); + lsn = xlog_recover_get_buf_lsn(log, bp, buf_f); if (!lsn) return true; if (lsn == -1) @@ -992,8 +992,8 @@ xlog_recover_this_buffer( if (XFS_LSN_CMP(lsn, current_lsn) < 0) return true; - trace_xfs_log_recover_buf_skip(mp->m_log, buf_f); - xlog_recover_validate_buf_type(mp, bp, buf_f, NULLCOMMITLSN); + trace_xfs_log_recover_buf_skip(log, buf_f); + xlog_recover_validate_buf_type(log, bp, buf_f, NULLCOMMITLSN); /* * We're skipping replay of this buffer log item due to the log @@ -1065,22 +1065,22 @@ xlog_recover_buf_commit_pass2( * to simplify the rest of the code. */ if (buf_f->blf_flags & XFS_BLF_INODE_BUF) { - error = xlog_recover_do_inode_buffer(mp, item, bp, buf_f); + error = xlog_recover_do_inode_buffer(log, item, bp, buf_f); if (error || (bp->b_flags & XBF_STALE)) goto out_release; goto out_write; } if (buf_f->blf_flags & XFS_BLF_DQUOT_BUF) { - if (!xlog_recover_this_dquot_buffer(mp, log, item, bp, buf_f)) + if (!xlog_recover_this_dquot_buffer(log, item, bp, buf_f)) goto out_release; - error = xlog_recover_verify_dquot_buf_item(mp, item, bp, buf_f); + error = xlog_recover_verify_dquot_buf_item(log, item, bp, buf_f); if (error) goto out_release; - xlog_recover_buffer(mp, item, bp, buf_f); - error = xlog_recover_validate_buf_type(mp, bp, buf_f, + xlog_recover_buffer(log, item, bp, buf_f); + error = xlog_recover_validate_buf_type(log, bp, buf_f, NULLCOMMITLSN); if (error) goto out_release; @@ -1095,14 +1095,14 @@ xlog_recover_buf_commit_pass2( */ if (xlog_recovery_is_dir_buf(buf_f) && mp->m_dir_geo->blksize != BBTOB(buf_f->blf_len)) { - xlog_recover_do_partial_dabuf(mp, item, bp, buf_f); + xlog_recover_do_partial_dabuf(log, item, bp, buf_f); goto out_write; } /* * Whole buffer recovery, dependent on the LSN in the on-disk structure. */ - if (!xlog_recover_this_buffer(mp, bp, buf_f, current_lsn)) { + if (!xlog_recover_this_buffer(log, bp, buf_f, current_lsn)) { /* * We may have verified this buffer even though we aren't * recovering it. Return the verifier error for early detection @@ -1113,7 +1113,7 @@ xlog_recover_buf_commit_pass2( } - error = xlog_recover_do_reg_buffer(mp, item, bp, buf_f, current_lsn); + error = xlog_recover_do_reg_buffer(log, item, bp, buf_f, current_lsn); if (error) goto out_release; -- 2.43.0