aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_log_recover.c
diff options
context:
space:
mode:
authorFrom: Christoph Hellwig <hch@lst.de>2008-11-27 22:23:38 -0500
committerNiv Sardi <xaiki@sgi.com>2008-11-30 19:37:20 -0500
commit4805621a37d9b2b16641b5c68597651419e9e252 (patch)
treea3c63689100a8c7ca2eb72efe4036f7863c34e12 /fs/xfs/xfs_log_recover.c
parent5e1be0fb1a3950597aeda448698e85b0595a2e92 (diff)
[XFS] factor out xfs_read_agf helper
Add a helper to read the AGF header and perform basic verification. Based on hunks from a larger patch from Dave Chinner. (First sent on Juli 23rd) Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Niv Sardi <xaiki@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
-rw-r--r--fs/xfs/xfs_log_recover.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index b552676ca5c4..d94987915d5e 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -3970,7 +3970,6 @@ xlog_recover_check_summary(
3970 xfs_agf_t *agfp; 3970 xfs_agf_t *agfp;
3971 xfs_buf_t *agfbp; 3971 xfs_buf_t *agfbp;
3972 xfs_buf_t *agibp; 3972 xfs_buf_t *agibp;
3973 xfs_daddr_t agfdaddr;
3974 xfs_buf_t *sbbp; 3973 xfs_buf_t *sbbp;
3975#ifdef XFS_LOUD_RECOVERY 3974#ifdef XFS_LOUD_RECOVERY
3976 xfs_sb_t *sbp; 3975 xfs_sb_t *sbp;
@@ -3987,21 +3986,18 @@ xlog_recover_check_summary(
3987 itotal = 0LL; 3986 itotal = 0LL;
3988 ifree = 0LL; 3987 ifree = 0LL;
3989 for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { 3988 for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) {
3990 agfdaddr = XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)); 3989 error = xfs_read_agf(mp, NULL, agno, 0, &agfbp);
3991 agfbp = xfs_buf_read(mp->m_ddev_targp, agfdaddr, 3990 if (error) {
3992 XFS_FSS_TO_BB(mp, 1), 0); 3991 xfs_fs_cmn_err(CE_ALERT, mp,
3993 if (XFS_BUF_ISERROR(agfbp)) { 3992 "xlog_recover_check_summary(agf)"
3994 xfs_ioerror_alert("xlog_recover_check_summary(agf)", 3993 "agf read failed agno %d error %d",
3995 mp, agfbp, agfdaddr); 3994 agno, error);
3995 } else {
3996 agfp = XFS_BUF_TO_AGF(agfbp);
3997 freeblks += be32_to_cpu(agfp->agf_freeblks) +
3998 be32_to_cpu(agfp->agf_flcount);
3999 xfs_buf_relse(agfbp);
3996 } 4000 }
3997 agfp = XFS_BUF_TO_AGF(agfbp);
3998 ASSERT(XFS_AGF_MAGIC == be32_to_cpu(agfp->agf_magicnum));
3999 ASSERT(XFS_AGF_GOOD_VERSION(be32_to_cpu(agfp->agf_versionnum)));
4000 ASSERT(be32_to_cpu(agfp->agf_seqno) == agno);
4001
4002 freeblks += be32_to_cpu(agfp->agf_freeblks) +
4003 be32_to_cpu(agfp->agf_flcount);
4004 xfs_buf_relse(agfbp);
4005 4001
4006 error = xfs_read_agi(mp, NULL, agno, &agibp); 4002 error = xfs_read_agi(mp, NULL, agno, &agibp);
4007 if (!error) { 4003 if (!error) {