diff options
author | From: Christoph Hellwig <hch@lst.de> | 2008-11-27 22:23:38 -0500 |
---|---|---|
committer | Niv Sardi <xaiki@sgi.com> | 2008-11-30 19:37:20 -0500 |
commit | 4805621a37d9b2b16641b5c68597651419e9e252 (patch) | |
tree | a3c63689100a8c7ca2eb72efe4036f7863c34e12 /fs/xfs/xfs_log_recover.c | |
parent | 5e1be0fb1a3950597aeda448698e85b0595a2e92 (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.c | 26 |
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) { |