diff options
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
-rw-r--r-- | fs/xfs/xfs_log_recover.c | 223 |
1 files changed, 109 insertions, 114 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index aa0ebb776903..0c4a5618e7af 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c | |||
@@ -92,7 +92,7 @@ xlog_get_bp( | |||
92 | int nbblks) | 92 | int nbblks) |
93 | { | 93 | { |
94 | if (!xlog_buf_bbcount_valid(log, nbblks)) { | 94 | if (!xlog_buf_bbcount_valid(log, nbblks)) { |
95 | xlog_warn("XFS: Invalid block length (0x%x) given for buffer", | 95 | xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer", |
96 | nbblks); | 96 | nbblks); |
97 | XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); | 97 | XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); |
98 | return NULL; | 98 | return NULL; |
@@ -160,7 +160,7 @@ xlog_bread_noalign( | |||
160 | int error; | 160 | int error; |
161 | 161 | ||
162 | if (!xlog_buf_bbcount_valid(log, nbblks)) { | 162 | if (!xlog_buf_bbcount_valid(log, nbblks)) { |
163 | xlog_warn("XFS: Invalid block length (0x%x) given for buffer", | 163 | xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer", |
164 | nbblks); | 164 | nbblks); |
165 | XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); | 165 | XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); |
166 | return EFSCORRUPTED; | 166 | return EFSCORRUPTED; |
@@ -219,7 +219,7 @@ xlog_bwrite( | |||
219 | int error; | 219 | int error; |
220 | 220 | ||
221 | if (!xlog_buf_bbcount_valid(log, nbblks)) { | 221 | if (!xlog_buf_bbcount_valid(log, nbblks)) { |
222 | xlog_warn("XFS: Invalid block length (0x%x) given for buffer", | 222 | xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer", |
223 | nbblks); | 223 | nbblks); |
224 | XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); | 224 | XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp); |
225 | return EFSCORRUPTED; | 225 | return EFSCORRUPTED; |
@@ -254,9 +254,9 @@ xlog_header_check_dump( | |||
254 | xfs_mount_t *mp, | 254 | xfs_mount_t *mp, |
255 | xlog_rec_header_t *head) | 255 | xlog_rec_header_t *head) |
256 | { | 256 | { |
257 | cmn_err(CE_DEBUG, "%s: SB : uuid = %pU, fmt = %d\n", | 257 | xfs_debug(mp, "%s: SB : uuid = %pU, fmt = %d\n", |
258 | __func__, &mp->m_sb.sb_uuid, XLOG_FMT); | 258 | __func__, &mp->m_sb.sb_uuid, XLOG_FMT); |
259 | cmn_err(CE_DEBUG, " log : uuid = %pU, fmt = %d\n", | 259 | xfs_debug(mp, " log : uuid = %pU, fmt = %d\n", |
260 | &head->h_fs_uuid, be32_to_cpu(head->h_fmt)); | 260 | &head->h_fs_uuid, be32_to_cpu(head->h_fmt)); |
261 | } | 261 | } |
262 | #else | 262 | #else |
@@ -279,15 +279,15 @@ xlog_header_check_recover( | |||
279 | * a dirty log created in IRIX. | 279 | * a dirty log created in IRIX. |
280 | */ | 280 | */ |
281 | if (unlikely(be32_to_cpu(head->h_fmt) != XLOG_FMT)) { | 281 | if (unlikely(be32_to_cpu(head->h_fmt) != XLOG_FMT)) { |
282 | xlog_warn( | 282 | xfs_warn(mp, |
283 | "XFS: dirty log written in incompatible format - can't recover"); | 283 | "dirty log written in incompatible format - can't recover"); |
284 | xlog_header_check_dump(mp, head); | 284 | xlog_header_check_dump(mp, head); |
285 | XFS_ERROR_REPORT("xlog_header_check_recover(1)", | 285 | XFS_ERROR_REPORT("xlog_header_check_recover(1)", |
286 | XFS_ERRLEVEL_HIGH, mp); | 286 | XFS_ERRLEVEL_HIGH, mp); |
287 | return XFS_ERROR(EFSCORRUPTED); | 287 | return XFS_ERROR(EFSCORRUPTED); |
288 | } else if (unlikely(!uuid_equal(&mp->m_sb.sb_uuid, &head->h_fs_uuid))) { | 288 | } else if (unlikely(!uuid_equal(&mp->m_sb.sb_uuid, &head->h_fs_uuid))) { |
289 | xlog_warn( | 289 | xfs_warn(mp, |
290 | "XFS: dirty log entry has mismatched uuid - can't recover"); | 290 | "dirty log entry has mismatched uuid - can't recover"); |
291 | xlog_header_check_dump(mp, head); | 291 | xlog_header_check_dump(mp, head); |
292 | XFS_ERROR_REPORT("xlog_header_check_recover(2)", | 292 | XFS_ERROR_REPORT("xlog_header_check_recover(2)", |
293 | XFS_ERRLEVEL_HIGH, mp); | 293 | XFS_ERRLEVEL_HIGH, mp); |
@@ -312,9 +312,9 @@ xlog_header_check_mount( | |||
312 | * h_fs_uuid is nil, we assume this log was last mounted | 312 | * h_fs_uuid is nil, we assume this log was last mounted |
313 | * by IRIX and continue. | 313 | * by IRIX and continue. |
314 | */ | 314 | */ |
315 | xlog_warn("XFS: nil uuid in log - IRIX style log"); | 315 | xfs_warn(mp, "nil uuid in log - IRIX style log"); |
316 | } else if (unlikely(!uuid_equal(&mp->m_sb.sb_uuid, &head->h_fs_uuid))) { | 316 | } else if (unlikely(!uuid_equal(&mp->m_sb.sb_uuid, &head->h_fs_uuid))) { |
317 | xlog_warn("XFS: log has mismatched uuid - can't recover"); | 317 | xfs_warn(mp, "log has mismatched uuid - can't recover"); |
318 | xlog_header_check_dump(mp, head); | 318 | xlog_header_check_dump(mp, head); |
319 | XFS_ERROR_REPORT("xlog_header_check_mount", | 319 | XFS_ERROR_REPORT("xlog_header_check_mount", |
320 | XFS_ERRLEVEL_HIGH, mp); | 320 | XFS_ERRLEVEL_HIGH, mp); |
@@ -490,8 +490,8 @@ xlog_find_verify_log_record( | |||
490 | for (i = (*last_blk) - 1; i >= 0; i--) { | 490 | for (i = (*last_blk) - 1; i >= 0; i--) { |
491 | if (i < start_blk) { | 491 | if (i < start_blk) { |
492 | /* valid log record not found */ | 492 | /* valid log record not found */ |
493 | xlog_warn( | 493 | xfs_warn(log->l_mp, |
494 | "XFS: Log inconsistent (didn't find previous header)"); | 494 | "Log inconsistent (didn't find previous header)"); |
495 | ASSERT(0); | 495 | ASSERT(0); |
496 | error = XFS_ERROR(EIO); | 496 | error = XFS_ERROR(EIO); |
497 | goto out; | 497 | goto out; |
@@ -591,12 +591,12 @@ xlog_find_head( | |||
591 | * mkfs etc write a dummy unmount record to a fresh | 591 | * mkfs etc write a dummy unmount record to a fresh |
592 | * log so we can store the uuid in there | 592 | * log so we can store the uuid in there |
593 | */ | 593 | */ |
594 | xlog_warn("XFS: totally zeroed log"); | 594 | xfs_warn(log->l_mp, "totally zeroed log"); |
595 | } | 595 | } |
596 | 596 | ||
597 | return 0; | 597 | return 0; |
598 | } else if (error) { | 598 | } else if (error) { |
599 | xlog_warn("XFS: empty log check failed"); | 599 | xfs_warn(log->l_mp, "empty log check failed"); |
600 | return error; | 600 | return error; |
601 | } | 601 | } |
602 | 602 | ||
@@ -819,7 +819,7 @@ validate_head: | |||
819 | xlog_put_bp(bp); | 819 | xlog_put_bp(bp); |
820 | 820 | ||
821 | if (error) | 821 | if (error) |
822 | xlog_warn("XFS: failed to find log head"); | 822 | xfs_warn(log->l_mp, "failed to find log head"); |
823 | return error; | 823 | return error; |
824 | } | 824 | } |
825 | 825 | ||
@@ -912,7 +912,7 @@ xlog_find_tail( | |||
912 | } | 912 | } |
913 | } | 913 | } |
914 | if (!found) { | 914 | if (!found) { |
915 | xlog_warn("XFS: xlog_find_tail: couldn't find sync record"); | 915 | xfs_warn(log->l_mp, "%s: couldn't find sync record", __func__); |
916 | ASSERT(0); | 916 | ASSERT(0); |
917 | return XFS_ERROR(EIO); | 917 | return XFS_ERROR(EIO); |
918 | } | 918 | } |
@@ -1028,7 +1028,7 @@ done: | |||
1028 | xlog_put_bp(bp); | 1028 | xlog_put_bp(bp); |
1029 | 1029 | ||
1030 | if (error) | 1030 | if (error) |
1031 | xlog_warn("XFS: failed to locate log tail"); | 1031 | xfs_warn(log->l_mp, "failed to locate log tail"); |
1032 | return error; | 1032 | return error; |
1033 | } | 1033 | } |
1034 | 1034 | ||
@@ -1092,7 +1092,8 @@ xlog_find_zeroed( | |||
1092 | * the first block must be 1. If it's not, maybe we're | 1092 | * the first block must be 1. If it's not, maybe we're |
1093 | * not looking at a log... Bail out. | 1093 | * not looking at a log... Bail out. |
1094 | */ | 1094 | */ |
1095 | xlog_warn("XFS: Log inconsistent or not a log (last==0, first!=1)"); | 1095 | xfs_warn(log->l_mp, |
1096 | "Log inconsistent or not a log (last==0, first!=1)"); | ||
1096 | return XFS_ERROR(EINVAL); | 1097 | return XFS_ERROR(EINVAL); |
1097 | } | 1098 | } |
1098 | 1099 | ||
@@ -1506,8 +1507,8 @@ xlog_recover_add_to_trans( | |||
1506 | if (list_empty(&trans->r_itemq)) { | 1507 | if (list_empty(&trans->r_itemq)) { |
1507 | /* we need to catch log corruptions here */ | 1508 | /* we need to catch log corruptions here */ |
1508 | if (*(uint *)dp != XFS_TRANS_HEADER_MAGIC) { | 1509 | if (*(uint *)dp != XFS_TRANS_HEADER_MAGIC) { |
1509 | xlog_warn("XFS: xlog_recover_add_to_trans: " | 1510 | xfs_warn(log->l_mp, "%s: bad header magic number", |
1510 | "bad header magic number"); | 1511 | __func__); |
1511 | ASSERT(0); | 1512 | ASSERT(0); |
1512 | return XFS_ERROR(EIO); | 1513 | return XFS_ERROR(EIO); |
1513 | } | 1514 | } |
@@ -1534,8 +1535,8 @@ xlog_recover_add_to_trans( | |||
1534 | if (item->ri_total == 0) { /* first region to be added */ | 1535 | if (item->ri_total == 0) { /* first region to be added */ |
1535 | if (in_f->ilf_size == 0 || | 1536 | if (in_f->ilf_size == 0 || |
1536 | in_f->ilf_size > XLOG_MAX_REGIONS_IN_ITEM) { | 1537 | in_f->ilf_size > XLOG_MAX_REGIONS_IN_ITEM) { |
1537 | xlog_warn( | 1538 | xfs_warn(log->l_mp, |
1538 | "XFS: bad number of regions (%d) in inode log format", | 1539 | "bad number of regions (%d) in inode log format", |
1539 | in_f->ilf_size); | 1540 | in_f->ilf_size); |
1540 | ASSERT(0); | 1541 | ASSERT(0); |
1541 | return XFS_ERROR(EIO); | 1542 | return XFS_ERROR(EIO); |
@@ -1592,8 +1593,9 @@ xlog_recover_reorder_trans( | |||
1592 | list_move_tail(&item->ri_list, &trans->r_itemq); | 1593 | list_move_tail(&item->ri_list, &trans->r_itemq); |
1593 | break; | 1594 | break; |
1594 | default: | 1595 | default: |
1595 | xlog_warn( | 1596 | xfs_warn(log->l_mp, |
1596 | "XFS: xlog_recover_reorder_trans: unrecognized type of log operation"); | 1597 | "%s: unrecognized type of log operation", |
1598 | __func__); | ||
1597 | ASSERT(0); | 1599 | ASSERT(0); |
1598 | return XFS_ERROR(EIO); | 1600 | return XFS_ERROR(EIO); |
1599 | } | 1601 | } |
@@ -1803,8 +1805,9 @@ xlog_recover_do_inode_buffer( | |||
1803 | logged_nextp = item->ri_buf[item_index].i_addr + | 1805 | logged_nextp = item->ri_buf[item_index].i_addr + |
1804 | next_unlinked_offset - reg_buf_offset; | 1806 | next_unlinked_offset - reg_buf_offset; |
1805 | if (unlikely(*logged_nextp == 0)) { | 1807 | if (unlikely(*logged_nextp == 0)) { |
1806 | xfs_fs_cmn_err(CE_ALERT, mp, | 1808 | xfs_alert(mp, |
1807 | "bad inode buffer log record (ptr = 0x%p, bp = 0x%p). XFS trying to replay bad (0) inode di_next_unlinked field", | 1809 | "Bad inode buffer log record (ptr = 0x%p, bp = 0x%p). " |
1810 | "Trying to replay bad (0) inode di_next_unlinked field.", | ||
1808 | item, bp); | 1811 | item, bp); |
1809 | XFS_ERROR_REPORT("xlog_recover_do_inode_buf", | 1812 | XFS_ERROR_REPORT("xlog_recover_do_inode_buf", |
1810 | XFS_ERRLEVEL_LOW, mp); | 1813 | XFS_ERRLEVEL_LOW, mp); |
@@ -1863,17 +1866,17 @@ xlog_recover_do_reg_buffer( | |||
1863 | if (buf_f->blf_flags & | 1866 | if (buf_f->blf_flags & |
1864 | (XFS_BLF_UDQUOT_BUF|XFS_BLF_PDQUOT_BUF|XFS_BLF_GDQUOT_BUF)) { | 1867 | (XFS_BLF_UDQUOT_BUF|XFS_BLF_PDQUOT_BUF|XFS_BLF_GDQUOT_BUF)) { |
1865 | if (item->ri_buf[i].i_addr == NULL) { | 1868 | if (item->ri_buf[i].i_addr == NULL) { |
1866 | cmn_err(CE_ALERT, | 1869 | xfs_alert(mp, |
1867 | "XFS: NULL dquot in %s.", __func__); | 1870 | "XFS: NULL dquot in %s.", __func__); |
1868 | goto next; | 1871 | goto next; |
1869 | } | 1872 | } |
1870 | if (item->ri_buf[i].i_len < sizeof(xfs_disk_dquot_t)) { | 1873 | if (item->ri_buf[i].i_len < sizeof(xfs_disk_dquot_t)) { |
1871 | cmn_err(CE_ALERT, | 1874 | xfs_alert(mp, |
1872 | "XFS: dquot too small (%d) in %s.", | 1875 | "XFS: dquot too small (%d) in %s.", |
1873 | item->ri_buf[i].i_len, __func__); | 1876 | item->ri_buf[i].i_len, __func__); |
1874 | goto next; | 1877 | goto next; |
1875 | } | 1878 | } |
1876 | error = xfs_qm_dqcheck(item->ri_buf[i].i_addr, | 1879 | error = xfs_qm_dqcheck(mp, item->ri_buf[i].i_addr, |
1877 | -1, 0, XFS_QMOPT_DOWARN, | 1880 | -1, 0, XFS_QMOPT_DOWARN, |
1878 | "dquot_buf_recover"); | 1881 | "dquot_buf_recover"); |
1879 | if (error) | 1882 | if (error) |
@@ -1898,6 +1901,7 @@ xlog_recover_do_reg_buffer( | |||
1898 | */ | 1901 | */ |
1899 | int | 1902 | int |
1900 | xfs_qm_dqcheck( | 1903 | xfs_qm_dqcheck( |
1904 | struct xfs_mount *mp, | ||
1901 | xfs_disk_dquot_t *ddq, | 1905 | xfs_disk_dquot_t *ddq, |
1902 | xfs_dqid_t id, | 1906 | xfs_dqid_t id, |
1903 | uint type, /* used only when IO_dorepair is true */ | 1907 | uint type, /* used only when IO_dorepair is true */ |
@@ -1924,14 +1928,14 @@ xfs_qm_dqcheck( | |||
1924 | */ | 1928 | */ |
1925 | if (be16_to_cpu(ddq->d_magic) != XFS_DQUOT_MAGIC) { | 1929 | if (be16_to_cpu(ddq->d_magic) != XFS_DQUOT_MAGIC) { |
1926 | if (flags & XFS_QMOPT_DOWARN) | 1930 | if (flags & XFS_QMOPT_DOWARN) |
1927 | cmn_err(CE_ALERT, | 1931 | xfs_alert(mp, |
1928 | "%s : XFS dquot ID 0x%x, magic 0x%x != 0x%x", | 1932 | "%s : XFS dquot ID 0x%x, magic 0x%x != 0x%x", |
1929 | str, id, be16_to_cpu(ddq->d_magic), XFS_DQUOT_MAGIC); | 1933 | str, id, be16_to_cpu(ddq->d_magic), XFS_DQUOT_MAGIC); |
1930 | errs++; | 1934 | errs++; |
1931 | } | 1935 | } |
1932 | if (ddq->d_version != XFS_DQUOT_VERSION) { | 1936 | if (ddq->d_version != XFS_DQUOT_VERSION) { |
1933 | if (flags & XFS_QMOPT_DOWARN) | 1937 | if (flags & XFS_QMOPT_DOWARN) |
1934 | cmn_err(CE_ALERT, | 1938 | xfs_alert(mp, |
1935 | "%s : XFS dquot ID 0x%x, version 0x%x != 0x%x", | 1939 | "%s : XFS dquot ID 0x%x, version 0x%x != 0x%x", |
1936 | str, id, ddq->d_version, XFS_DQUOT_VERSION); | 1940 | str, id, ddq->d_version, XFS_DQUOT_VERSION); |
1937 | errs++; | 1941 | errs++; |
@@ -1941,7 +1945,7 @@ xfs_qm_dqcheck( | |||
1941 | ddq->d_flags != XFS_DQ_PROJ && | 1945 | ddq->d_flags != XFS_DQ_PROJ && |
1942 | ddq->d_flags != XFS_DQ_GROUP) { | 1946 | ddq->d_flags != XFS_DQ_GROUP) { |
1943 | if (flags & XFS_QMOPT_DOWARN) | 1947 | if (flags & XFS_QMOPT_DOWARN) |
1944 | cmn_err(CE_ALERT, | 1948 | xfs_alert(mp, |
1945 | "%s : XFS dquot ID 0x%x, unknown flags 0x%x", | 1949 | "%s : XFS dquot ID 0x%x, unknown flags 0x%x", |
1946 | str, id, ddq->d_flags); | 1950 | str, id, ddq->d_flags); |
1947 | errs++; | 1951 | errs++; |
@@ -1949,7 +1953,7 @@ xfs_qm_dqcheck( | |||
1949 | 1953 | ||
1950 | if (id != -1 && id != be32_to_cpu(ddq->d_id)) { | 1954 | if (id != -1 && id != be32_to_cpu(ddq->d_id)) { |
1951 | if (flags & XFS_QMOPT_DOWARN) | 1955 | if (flags & XFS_QMOPT_DOWARN) |
1952 | cmn_err(CE_ALERT, | 1956 | xfs_alert(mp, |
1953 | "%s : ondisk-dquot 0x%p, ID mismatch: " | 1957 | "%s : ondisk-dquot 0x%p, ID mismatch: " |
1954 | "0x%x expected, found id 0x%x", | 1958 | "0x%x expected, found id 0x%x", |
1955 | str, ddq, id, be32_to_cpu(ddq->d_id)); | 1959 | str, ddq, id, be32_to_cpu(ddq->d_id)); |
@@ -1962,9 +1966,8 @@ xfs_qm_dqcheck( | |||
1962 | be64_to_cpu(ddq->d_blk_softlimit)) { | 1966 | be64_to_cpu(ddq->d_blk_softlimit)) { |
1963 | if (!ddq->d_btimer) { | 1967 | if (!ddq->d_btimer) { |
1964 | if (flags & XFS_QMOPT_DOWARN) | 1968 | if (flags & XFS_QMOPT_DOWARN) |
1965 | cmn_err(CE_ALERT, | 1969 | xfs_alert(mp, |
1966 | "%s : Dquot ID 0x%x (0x%p) " | 1970 | "%s : Dquot ID 0x%x (0x%p) BLK TIMER NOT STARTED", |
1967 | "BLK TIMER NOT STARTED", | ||
1968 | str, (int)be32_to_cpu(ddq->d_id), ddq); | 1971 | str, (int)be32_to_cpu(ddq->d_id), ddq); |
1969 | errs++; | 1972 | errs++; |
1970 | } | 1973 | } |
@@ -1974,9 +1977,8 @@ xfs_qm_dqcheck( | |||
1974 | be64_to_cpu(ddq->d_ino_softlimit)) { | 1977 | be64_to_cpu(ddq->d_ino_softlimit)) { |
1975 | if (!ddq->d_itimer) { | 1978 | if (!ddq->d_itimer) { |
1976 | if (flags & XFS_QMOPT_DOWARN) | 1979 | if (flags & XFS_QMOPT_DOWARN) |
1977 | cmn_err(CE_ALERT, | 1980 | xfs_alert(mp, |
1978 | "%s : Dquot ID 0x%x (0x%p) " | 1981 | "%s : Dquot ID 0x%x (0x%p) INODE TIMER NOT STARTED", |
1979 | "INODE TIMER NOT STARTED", | ||
1980 | str, (int)be32_to_cpu(ddq->d_id), ddq); | 1982 | str, (int)be32_to_cpu(ddq->d_id), ddq); |
1981 | errs++; | 1983 | errs++; |
1982 | } | 1984 | } |
@@ -1986,9 +1988,8 @@ xfs_qm_dqcheck( | |||
1986 | be64_to_cpu(ddq->d_rtb_softlimit)) { | 1988 | be64_to_cpu(ddq->d_rtb_softlimit)) { |
1987 | if (!ddq->d_rtbtimer) { | 1989 | if (!ddq->d_rtbtimer) { |
1988 | if (flags & XFS_QMOPT_DOWARN) | 1990 | if (flags & XFS_QMOPT_DOWARN) |
1989 | cmn_err(CE_ALERT, | 1991 | xfs_alert(mp, |
1990 | "%s : Dquot ID 0x%x (0x%p) " | 1992 | "%s : Dquot ID 0x%x (0x%p) RTBLK TIMER NOT STARTED", |
1991 | "RTBLK TIMER NOT STARTED", | ||
1992 | str, (int)be32_to_cpu(ddq->d_id), ddq); | 1993 | str, (int)be32_to_cpu(ddq->d_id), ddq); |
1993 | errs++; | 1994 | errs++; |
1994 | } | 1995 | } |
@@ -1999,7 +2000,7 @@ xfs_qm_dqcheck( | |||
1999 | return errs; | 2000 | return errs; |
2000 | 2001 | ||
2001 | if (flags & XFS_QMOPT_DOWARN) | 2002 | if (flags & XFS_QMOPT_DOWARN) |
2002 | cmn_err(CE_NOTE, "Re-initializing dquot ID 0x%x", id); | 2003 | xfs_notice(mp, "Re-initializing dquot ID 0x%x", id); |
2003 | 2004 | ||
2004 | /* | 2005 | /* |
2005 | * Typically, a repair is only requested by quotacheck. | 2006 | * Typically, a repair is only requested by quotacheck. |
@@ -2218,9 +2219,9 @@ xlog_recover_inode_pass2( | |||
2218 | */ | 2219 | */ |
2219 | if (unlikely(be16_to_cpu(dip->di_magic) != XFS_DINODE_MAGIC)) { | 2220 | if (unlikely(be16_to_cpu(dip->di_magic) != XFS_DINODE_MAGIC)) { |
2220 | xfs_buf_relse(bp); | 2221 | xfs_buf_relse(bp); |
2221 | xfs_fs_cmn_err(CE_ALERT, mp, | 2222 | xfs_alert(mp, |
2222 | "xfs_inode_recover: Bad inode magic number, dino ptr = 0x%p, dino bp = 0x%p, ino = %Ld", | 2223 | "%s: Bad inode magic number, dip = 0x%p, dino bp = 0x%p, ino = %Ld", |
2223 | dip, bp, in_f->ilf_ino); | 2224 | __func__, dip, bp, in_f->ilf_ino); |
2224 | XFS_ERROR_REPORT("xlog_recover_inode_pass2(1)", | 2225 | XFS_ERROR_REPORT("xlog_recover_inode_pass2(1)", |
2225 | XFS_ERRLEVEL_LOW, mp); | 2226 | XFS_ERRLEVEL_LOW, mp); |
2226 | error = EFSCORRUPTED; | 2227 | error = EFSCORRUPTED; |
@@ -2229,9 +2230,9 @@ xlog_recover_inode_pass2( | |||
2229 | dicp = item->ri_buf[1].i_addr; | 2230 | dicp = item->ri_buf[1].i_addr; |
2230 | if (unlikely(dicp->di_magic != XFS_DINODE_MAGIC)) { | 2231 | if (unlikely(dicp->di_magic != XFS_DINODE_MAGIC)) { |
2231 | xfs_buf_relse(bp); | 2232 | xfs_buf_relse(bp); |
2232 | xfs_fs_cmn_err(CE_ALERT, mp, | 2233 | xfs_alert(mp, |
2233 | "xfs_inode_recover: Bad inode log record, rec ptr 0x%p, ino %Ld", | 2234 | "%s: Bad inode log record, rec ptr 0x%p, ino %Ld", |
2234 | item, in_f->ilf_ino); | 2235 | __func__, item, in_f->ilf_ino); |
2235 | XFS_ERROR_REPORT("xlog_recover_inode_pass2(2)", | 2236 | XFS_ERROR_REPORT("xlog_recover_inode_pass2(2)", |
2236 | XFS_ERRLEVEL_LOW, mp); | 2237 | XFS_ERRLEVEL_LOW, mp); |
2237 | error = EFSCORRUPTED; | 2238 | error = EFSCORRUPTED; |
@@ -2263,9 +2264,10 @@ xlog_recover_inode_pass2( | |||
2263 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(3)", | 2264 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(3)", |
2264 | XFS_ERRLEVEL_LOW, mp, dicp); | 2265 | XFS_ERRLEVEL_LOW, mp, dicp); |
2265 | xfs_buf_relse(bp); | 2266 | xfs_buf_relse(bp); |
2266 | xfs_fs_cmn_err(CE_ALERT, mp, | 2267 | xfs_alert(mp, |
2267 | "xfs_inode_recover: Bad regular inode log record, rec ptr 0x%p, ino ptr = 0x%p, ino bp = 0x%p, ino %Ld", | 2268 | "%s: Bad regular inode log record, rec ptr 0x%p, " |
2268 | item, dip, bp, in_f->ilf_ino); | 2269 | "ino ptr = 0x%p, ino bp = 0x%p, ino %Ld", |
2270 | __func__, item, dip, bp, in_f->ilf_ino); | ||
2269 | error = EFSCORRUPTED; | 2271 | error = EFSCORRUPTED; |
2270 | goto error; | 2272 | goto error; |
2271 | } | 2273 | } |
@@ -2276,9 +2278,10 @@ xlog_recover_inode_pass2( | |||
2276 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(4)", | 2278 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(4)", |
2277 | XFS_ERRLEVEL_LOW, mp, dicp); | 2279 | XFS_ERRLEVEL_LOW, mp, dicp); |
2278 | xfs_buf_relse(bp); | 2280 | xfs_buf_relse(bp); |
2279 | xfs_fs_cmn_err(CE_ALERT, mp, | 2281 | xfs_alert(mp, |
2280 | "xfs_inode_recover: Bad dir inode log record, rec ptr 0x%p, ino ptr = 0x%p, ino bp = 0x%p, ino %Ld", | 2282 | "%s: Bad dir inode log record, rec ptr 0x%p, " |
2281 | item, dip, bp, in_f->ilf_ino); | 2283 | "ino ptr = 0x%p, ino bp = 0x%p, ino %Ld", |
2284 | __func__, item, dip, bp, in_f->ilf_ino); | ||
2282 | error = EFSCORRUPTED; | 2285 | error = EFSCORRUPTED; |
2283 | goto error; | 2286 | goto error; |
2284 | } | 2287 | } |
@@ -2287,9 +2290,10 @@ xlog_recover_inode_pass2( | |||
2287 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(5)", | 2290 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(5)", |
2288 | XFS_ERRLEVEL_LOW, mp, dicp); | 2291 | XFS_ERRLEVEL_LOW, mp, dicp); |
2289 | xfs_buf_relse(bp); | 2292 | xfs_buf_relse(bp); |
2290 | xfs_fs_cmn_err(CE_ALERT, mp, | 2293 | xfs_alert(mp, |
2291 | "xfs_inode_recover: Bad inode log record, rec ptr 0x%p, dino ptr 0x%p, dino bp 0x%p, ino %Ld, total extents = %d, nblocks = %Ld", | 2294 | "%s: Bad inode log record, rec ptr 0x%p, dino ptr 0x%p, " |
2292 | item, dip, bp, in_f->ilf_ino, | 2295 | "dino bp 0x%p, ino %Ld, total extents = %d, nblocks = %Ld", |
2296 | __func__, item, dip, bp, in_f->ilf_ino, | ||
2293 | dicp->di_nextents + dicp->di_anextents, | 2297 | dicp->di_nextents + dicp->di_anextents, |
2294 | dicp->di_nblocks); | 2298 | dicp->di_nblocks); |
2295 | error = EFSCORRUPTED; | 2299 | error = EFSCORRUPTED; |
@@ -2299,8 +2303,9 @@ xlog_recover_inode_pass2( | |||
2299 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(6)", | 2303 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(6)", |
2300 | XFS_ERRLEVEL_LOW, mp, dicp); | 2304 | XFS_ERRLEVEL_LOW, mp, dicp); |
2301 | xfs_buf_relse(bp); | 2305 | xfs_buf_relse(bp); |
2302 | xfs_fs_cmn_err(CE_ALERT, mp, | 2306 | xfs_alert(mp, |
2303 | "xfs_inode_recover: Bad inode log rec ptr 0x%p, dino ptr 0x%p, dino bp 0x%p, ino %Ld, forkoff 0x%x", | 2307 | "%s: Bad inode log record, rec ptr 0x%p, dino ptr 0x%p, " |
2308 | "dino bp 0x%p, ino %Ld, forkoff 0x%x", __func__, | ||
2304 | item, dip, bp, in_f->ilf_ino, dicp->di_forkoff); | 2309 | item, dip, bp, in_f->ilf_ino, dicp->di_forkoff); |
2305 | error = EFSCORRUPTED; | 2310 | error = EFSCORRUPTED; |
2306 | goto error; | 2311 | goto error; |
@@ -2309,9 +2314,9 @@ xlog_recover_inode_pass2( | |||
2309 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(7)", | 2314 | XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(7)", |
2310 | XFS_ERRLEVEL_LOW, mp, dicp); | 2315 | XFS_ERRLEVEL_LOW, mp, dicp); |
2311 | xfs_buf_relse(bp); | 2316 | xfs_buf_relse(bp); |
2312 | xfs_fs_cmn_err(CE_ALERT, mp, | 2317 | xfs_alert(mp, |
2313 | "xfs_inode_recover: Bad inode log record length %d, rec ptr 0x%p", | 2318 | "%s: Bad inode log record length %d, rec ptr 0x%p", |
2314 | item->ri_buf[1].i_len, item); | 2319 | __func__, item->ri_buf[1].i_len, item); |
2315 | error = EFSCORRUPTED; | 2320 | error = EFSCORRUPTED; |
2316 | goto error; | 2321 | goto error; |
2317 | } | 2322 | } |
@@ -2398,7 +2403,7 @@ xlog_recover_inode_pass2( | |||
2398 | break; | 2403 | break; |
2399 | 2404 | ||
2400 | default: | 2405 | default: |
2401 | xlog_warn("XFS: xlog_recover_inode_pass2: Invalid flag"); | 2406 | xfs_warn(log->l_mp, "%s: Invalid flag", __func__); |
2402 | ASSERT(0); | 2407 | ASSERT(0); |
2403 | xfs_buf_relse(bp); | 2408 | xfs_buf_relse(bp); |
2404 | error = EIO; | 2409 | error = EIO; |
@@ -2467,13 +2472,11 @@ xlog_recover_dquot_pass2( | |||
2467 | 2472 | ||
2468 | recddq = item->ri_buf[1].i_addr; | 2473 | recddq = item->ri_buf[1].i_addr; |
2469 | if (recddq == NULL) { | 2474 | if (recddq == NULL) { |
2470 | cmn_err(CE_ALERT, | 2475 | xfs_alert(log->l_mp, "NULL dquot in %s.", __func__); |
2471 | "XFS: NULL dquot in %s.", __func__); | ||
2472 | return XFS_ERROR(EIO); | 2476 | return XFS_ERROR(EIO); |
2473 | } | 2477 | } |
2474 | if (item->ri_buf[1].i_len < sizeof(xfs_disk_dquot_t)) { | 2478 | if (item->ri_buf[1].i_len < sizeof(xfs_disk_dquot_t)) { |
2475 | cmn_err(CE_ALERT, | 2479 | xfs_alert(log->l_mp, "dquot too small (%d) in %s.", |
2476 | "XFS: dquot too small (%d) in %s.", | ||
2477 | item->ri_buf[1].i_len, __func__); | 2480 | item->ri_buf[1].i_len, __func__); |
2478 | return XFS_ERROR(EIO); | 2481 | return XFS_ERROR(EIO); |
2479 | } | 2482 | } |
@@ -2498,12 +2501,10 @@ xlog_recover_dquot_pass2( | |||
2498 | */ | 2501 | */ |
2499 | dq_f = item->ri_buf[0].i_addr; | 2502 | dq_f = item->ri_buf[0].i_addr; |
2500 | ASSERT(dq_f); | 2503 | ASSERT(dq_f); |
2501 | if ((error = xfs_qm_dqcheck(recddq, | 2504 | error = xfs_qm_dqcheck(mp, recddq, dq_f->qlf_id, 0, XFS_QMOPT_DOWARN, |
2502 | dq_f->qlf_id, | 2505 | "xlog_recover_dquot_pass2 (log copy)"); |
2503 | 0, XFS_QMOPT_DOWARN, | 2506 | if (error) |
2504 | "xlog_recover_dquot_pass2 (log copy)"))) { | ||
2505 | return XFS_ERROR(EIO); | 2507 | return XFS_ERROR(EIO); |
2506 | } | ||
2507 | ASSERT(dq_f->qlf_len == 1); | 2508 | ASSERT(dq_f->qlf_len == 1); |
2508 | 2509 | ||
2509 | error = xfs_read_buf(mp, mp->m_ddev_targp, | 2510 | error = xfs_read_buf(mp, mp->m_ddev_targp, |
@@ -2523,8 +2524,9 @@ xlog_recover_dquot_pass2( | |||
2523 | * was among a chunk of dquots created earlier, and we did some | 2524 | * was among a chunk of dquots created earlier, and we did some |
2524 | * minimal initialization then. | 2525 | * minimal initialization then. |
2525 | */ | 2526 | */ |
2526 | if (xfs_qm_dqcheck(ddq, dq_f->qlf_id, 0, XFS_QMOPT_DOWARN, | 2527 | error = xfs_qm_dqcheck(mp, ddq, dq_f->qlf_id, 0, XFS_QMOPT_DOWARN, |
2527 | "xlog_recover_dquot_pass2")) { | 2528 | "xlog_recover_dquot_pass2"); |
2529 | if (error) { | ||
2528 | xfs_buf_relse(bp); | 2530 | xfs_buf_relse(bp); |
2529 | return XFS_ERROR(EIO); | 2531 | return XFS_ERROR(EIO); |
2530 | } | 2532 | } |
@@ -2676,9 +2678,8 @@ xlog_recover_commit_pass1( | |||
2676 | /* nothing to do in pass 1 */ | 2678 | /* nothing to do in pass 1 */ |
2677 | return 0; | 2679 | return 0; |
2678 | default: | 2680 | default: |
2679 | xlog_warn( | 2681 | xfs_warn(log->l_mp, "%s: invalid item type (%d)", |
2680 | "XFS: invalid item type (%d) xlog_recover_commit_pass1", | 2682 | __func__, ITEM_TYPE(item)); |
2681 | ITEM_TYPE(item)); | ||
2682 | ASSERT(0); | 2683 | ASSERT(0); |
2683 | return XFS_ERROR(EIO); | 2684 | return XFS_ERROR(EIO); |
2684 | } | 2685 | } |
@@ -2707,9 +2708,8 @@ xlog_recover_commit_pass2( | |||
2707 | /* nothing to do in pass2 */ | 2708 | /* nothing to do in pass2 */ |
2708 | return 0; | 2709 | return 0; |
2709 | default: | 2710 | default: |
2710 | xlog_warn( | 2711 | xfs_warn(log->l_mp, "%s: invalid item type (%d)", |
2711 | "XFS: invalid item type (%d) xlog_recover_commit_pass2", | 2712 | __func__, ITEM_TYPE(item)); |
2712 | ITEM_TYPE(item)); | ||
2713 | ASSERT(0); | 2713 | ASSERT(0); |
2714 | return XFS_ERROR(EIO); | 2714 | return XFS_ERROR(EIO); |
2715 | } | 2715 | } |
@@ -2751,10 +2751,11 @@ xlog_recover_commit_trans( | |||
2751 | 2751 | ||
2752 | STATIC int | 2752 | STATIC int |
2753 | xlog_recover_unmount_trans( | 2753 | xlog_recover_unmount_trans( |
2754 | struct log *log, | ||
2754 | xlog_recover_t *trans) | 2755 | xlog_recover_t *trans) |
2755 | { | 2756 | { |
2756 | /* Do nothing now */ | 2757 | /* Do nothing now */ |
2757 | xlog_warn("XFS: xlog_recover_unmount_trans: Unmount LR"); | 2758 | xfs_warn(log->l_mp, "%s: Unmount LR", __func__); |
2758 | return 0; | 2759 | return 0; |
2759 | } | 2760 | } |
2760 | 2761 | ||
@@ -2797,8 +2798,8 @@ xlog_recover_process_data( | |||
2797 | dp += sizeof(xlog_op_header_t); | 2798 | dp += sizeof(xlog_op_header_t); |
2798 | if (ohead->oh_clientid != XFS_TRANSACTION && | 2799 | if (ohead->oh_clientid != XFS_TRANSACTION && |
2799 | ohead->oh_clientid != XFS_LOG) { | 2800 | ohead->oh_clientid != XFS_LOG) { |
2800 | xlog_warn( | 2801 | xfs_warn(log->l_mp, "%s: bad clientid 0x%x", |
2801 | "XFS: xlog_recover_process_data: bad clientid"); | 2802 | __func__, ohead->oh_clientid); |
2802 | ASSERT(0); | 2803 | ASSERT(0); |
2803 | return (XFS_ERROR(EIO)); | 2804 | return (XFS_ERROR(EIO)); |
2804 | } | 2805 | } |
@@ -2811,8 +2812,8 @@ xlog_recover_process_data( | |||
2811 | be64_to_cpu(rhead->h_lsn)); | 2812 | be64_to_cpu(rhead->h_lsn)); |
2812 | } else { | 2813 | } else { |
2813 | if (dp + be32_to_cpu(ohead->oh_len) > lp) { | 2814 | if (dp + be32_to_cpu(ohead->oh_len) > lp) { |
2814 | xlog_warn( | 2815 | xfs_warn(log->l_mp, "%s: bad length 0x%x", |
2815 | "XFS: xlog_recover_process_data: bad length"); | 2816 | __func__, be32_to_cpu(ohead->oh_len)); |
2816 | WARN_ON(1); | 2817 | WARN_ON(1); |
2817 | return (XFS_ERROR(EIO)); | 2818 | return (XFS_ERROR(EIO)); |
2818 | } | 2819 | } |
@@ -2825,7 +2826,7 @@ xlog_recover_process_data( | |||
2825 | trans, pass); | 2826 | trans, pass); |
2826 | break; | 2827 | break; |
2827 | case XLOG_UNMOUNT_TRANS: | 2828 | case XLOG_UNMOUNT_TRANS: |
2828 | error = xlog_recover_unmount_trans(trans); | 2829 | error = xlog_recover_unmount_trans(log, trans); |
2829 | break; | 2830 | break; |
2830 | case XLOG_WAS_CONT_TRANS: | 2831 | case XLOG_WAS_CONT_TRANS: |
2831 | error = xlog_recover_add_to_cont_trans(log, | 2832 | error = xlog_recover_add_to_cont_trans(log, |
@@ -2833,8 +2834,8 @@ xlog_recover_process_data( | |||
2833 | be32_to_cpu(ohead->oh_len)); | 2834 | be32_to_cpu(ohead->oh_len)); |
2834 | break; | 2835 | break; |
2835 | case XLOG_START_TRANS: | 2836 | case XLOG_START_TRANS: |
2836 | xlog_warn( | 2837 | xfs_warn(log->l_mp, "%s: bad transaction", |
2837 | "XFS: xlog_recover_process_data: bad transaction"); | 2838 | __func__); |
2838 | ASSERT(0); | 2839 | ASSERT(0); |
2839 | error = XFS_ERROR(EIO); | 2840 | error = XFS_ERROR(EIO); |
2840 | break; | 2841 | break; |
@@ -2844,8 +2845,8 @@ xlog_recover_process_data( | |||
2844 | dp, be32_to_cpu(ohead->oh_len)); | 2845 | dp, be32_to_cpu(ohead->oh_len)); |
2845 | break; | 2846 | break; |
2846 | default: | 2847 | default: |
2847 | xlog_warn( | 2848 | xfs_warn(log->l_mp, "%s: bad flag 0x%x", |
2848 | "XFS: xlog_recover_process_data: bad flag"); | 2849 | __func__, flags); |
2849 | ASSERT(0); | 2850 | ASSERT(0); |
2850 | error = XFS_ERROR(EIO); | 2851 | error = XFS_ERROR(EIO); |
2851 | break; | 2852 | break; |
@@ -3030,8 +3031,7 @@ xlog_recover_clear_agi_bucket( | |||
3030 | out_abort: | 3031 | out_abort: |
3031 | xfs_trans_cancel(tp, XFS_TRANS_ABORT); | 3032 | xfs_trans_cancel(tp, XFS_TRANS_ABORT); |
3032 | out_error: | 3033 | out_error: |
3033 | xfs_fs_cmn_err(CE_WARN, mp, "xlog_recover_clear_agi_bucket: " | 3034 | xfs_warn(mp, "%s: failed to clear agi %d. Continuing.", __func__, agno); |
3034 | "failed to clear agi %d. Continuing.", agno); | ||
3035 | return; | 3035 | return; |
3036 | } | 3036 | } |
3037 | 3037 | ||
@@ -3282,7 +3282,7 @@ xlog_valid_rec_header( | |||
3282 | if (unlikely( | 3282 | if (unlikely( |
3283 | (!rhead->h_version || | 3283 | (!rhead->h_version || |
3284 | (be32_to_cpu(rhead->h_version) & (~XLOG_VERSION_OKBITS))))) { | 3284 | (be32_to_cpu(rhead->h_version) & (~XLOG_VERSION_OKBITS))))) { |
3285 | xlog_warn("XFS: %s: unrecognised log version (%d).", | 3285 | xfs_warn(log->l_mp, "%s: unrecognised log version (%d).", |
3286 | __func__, be32_to_cpu(rhead->h_version)); | 3286 | __func__, be32_to_cpu(rhead->h_version)); |
3287 | return XFS_ERROR(EIO); | 3287 | return XFS_ERROR(EIO); |
3288 | } | 3288 | } |
@@ -3740,10 +3740,9 @@ xlog_recover( | |||
3740 | return error; | 3740 | return error; |
3741 | } | 3741 | } |
3742 | 3742 | ||
3743 | cmn_err(CE_NOTE, | 3743 | xfs_notice(log->l_mp, "Starting recovery (logdev: %s)", |
3744 | "Starting XFS recovery on filesystem: %s (logdev: %s)", | 3744 | log->l_mp->m_logname ? log->l_mp->m_logname |
3745 | log->l_mp->m_fsname, log->l_mp->m_logname ? | 3745 | : "internal"); |
3746 | log->l_mp->m_logname : "internal"); | ||
3747 | 3746 | ||
3748 | error = xlog_do_recover(log, head_blk, tail_blk); | 3747 | error = xlog_do_recover(log, head_blk, tail_blk); |
3749 | log->l_flags |= XLOG_RECOVERY_NEEDED; | 3748 | log->l_flags |= XLOG_RECOVERY_NEEDED; |
@@ -3776,9 +3775,7 @@ xlog_recover_finish( | |||
3776 | int error; | 3775 | int error; |
3777 | error = xlog_recover_process_efis(log); | 3776 | error = xlog_recover_process_efis(log); |
3778 | if (error) { | 3777 | if (error) { |
3779 | cmn_err(CE_ALERT, | 3778 | xfs_alert(log->l_mp, "Failed to recover EFIs"); |
3780 | "Failed to recover EFIs on filesystem: %s", | ||
3781 | log->l_mp->m_fsname); | ||
3782 | return error; | 3779 | return error; |
3783 | } | 3780 | } |
3784 | /* | 3781 | /* |
@@ -3793,15 +3790,12 @@ xlog_recover_finish( | |||
3793 | 3790 | ||
3794 | xlog_recover_check_summary(log); | 3791 | xlog_recover_check_summary(log); |
3795 | 3792 | ||
3796 | cmn_err(CE_NOTE, | 3793 | xfs_notice(log->l_mp, "Ending recovery (logdev: %s)", |
3797 | "Ending XFS recovery on filesystem: %s (logdev: %s)", | 3794 | log->l_mp->m_logname ? log->l_mp->m_logname |
3798 | log->l_mp->m_fsname, log->l_mp->m_logname ? | 3795 | : "internal"); |
3799 | log->l_mp->m_logname : "internal"); | ||
3800 | log->l_flags &= ~XLOG_RECOVERY_NEEDED; | 3796 | log->l_flags &= ~XLOG_RECOVERY_NEEDED; |
3801 | } else { | 3797 | } else { |
3802 | cmn_err(CE_DEBUG, | 3798 | xfs_info(log->l_mp, "Ending clean mount"); |
3803 | "Ending clean XFS mount for filesystem: %s\n", | ||
3804 | log->l_mp->m_fsname); | ||
3805 | } | 3799 | } |
3806 | return 0; | 3800 | return 0; |
3807 | } | 3801 | } |
@@ -3834,10 +3828,8 @@ xlog_recover_check_summary( | |||
3834 | for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { | 3828 | for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) { |
3835 | error = xfs_read_agf(mp, NULL, agno, 0, &agfbp); | 3829 | error = xfs_read_agf(mp, NULL, agno, 0, &agfbp); |
3836 | if (error) { | 3830 | if (error) { |
3837 | xfs_fs_cmn_err(CE_ALERT, mp, | 3831 | xfs_alert(mp, "%s agf read failed agno %d error %d", |
3838 | "xlog_recover_check_summary(agf)" | 3832 | __func__, agno, error); |
3839 | "agf read failed agno %d error %d", | ||
3840 | agno, error); | ||
3841 | } else { | 3833 | } else { |
3842 | agfp = XFS_BUF_TO_AGF(agfbp); | 3834 | agfp = XFS_BUF_TO_AGF(agfbp); |
3843 | freeblks += be32_to_cpu(agfp->agf_freeblks) + | 3835 | freeblks += be32_to_cpu(agfp->agf_freeblks) + |
@@ -3846,7 +3838,10 @@ xlog_recover_check_summary( | |||
3846 | } | 3838 | } |
3847 | 3839 | ||
3848 | error = xfs_read_agi(mp, NULL, agno, &agibp); | 3840 | error = xfs_read_agi(mp, NULL, agno, &agibp); |
3849 | if (!error) { | 3841 | if (error) { |
3842 | xfs_alert(mp, "%s agi read failed agno %d error %d", | ||
3843 | __func__, agno, error); | ||
3844 | } else { | ||
3850 | struct xfs_agi *agi = XFS_BUF_TO_AGI(agibp); | 3845 | struct xfs_agi *agi = XFS_BUF_TO_AGI(agibp); |
3851 | 3846 | ||
3852 | itotal += be32_to_cpu(agi->agi_count); | 3847 | itotal += be32_to_cpu(agi->agi_count); |