Commit 895e196f authored by Darrick J. Wong's avatar Darrick J. Wong

xfs: convert EIO to EFSCORRUPTED when log contents are invalid

Convert EIO to EFSCORRUPTED in the logging code when we can determine
that the log contents are invalid.
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 2fe4f928
...@@ -456,7 +456,7 @@ xfs_bui_recover( ...@@ -456,7 +456,7 @@ xfs_bui_recover(
if (buip->bui_format.bui_nextents != XFS_BUI_MAX_FAST_EXTENTS) { if (buip->bui_format.bui_nextents != XFS_BUI_MAX_FAST_EXTENTS) {
set_bit(XFS_BUI_RECOVERED, &buip->bui_flags); set_bit(XFS_BUI_RECOVERED, &buip->bui_flags);
xfs_bui_release(buip); xfs_bui_release(buip);
return -EIO; return -EFSCORRUPTED;
} }
/* /*
...@@ -490,7 +490,7 @@ xfs_bui_recover( ...@@ -490,7 +490,7 @@ xfs_bui_recover(
*/ */
set_bit(XFS_BUI_RECOVERED, &buip->bui_flags); set_bit(XFS_BUI_RECOVERED, &buip->bui_flags);
xfs_bui_release(buip); xfs_bui_release(buip);
return -EIO; return -EFSCORRUPTED;
} }
error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate,
......
...@@ -625,7 +625,7 @@ xfs_efi_recover( ...@@ -625,7 +625,7 @@ xfs_efi_recover(
*/ */
set_bit(XFS_EFI_RECOVERED, &efip->efi_flags); set_bit(XFS_EFI_RECOVERED, &efip->efi_flags);
xfs_efi_release(efip); xfs_efi_release(efip);
return -EIO; return -EFSCORRUPTED;
} }
} }
......
...@@ -471,7 +471,7 @@ xlog_find_verify_log_record( ...@@ -471,7 +471,7 @@ xlog_find_verify_log_record(
xfs_warn(log->l_mp, xfs_warn(log->l_mp,
"Log inconsistent (didn't find previous header)"); "Log inconsistent (didn't find previous header)");
ASSERT(0); ASSERT(0);
error = -EIO; error = -EFSCORRUPTED;
goto out; goto out;
} }
...@@ -1350,7 +1350,7 @@ xlog_find_tail( ...@@ -1350,7 +1350,7 @@ xlog_find_tail(
return error; return error;
if (!error) { if (!error) {
xfs_warn(log->l_mp, "%s: couldn't find sync record", __func__); xfs_warn(log->l_mp, "%s: couldn't find sync record", __func__);
return -EIO; return -EFSCORRUPTED;
} }
*tail_blk = BLOCK_LSN(be64_to_cpu(rhead->h_tail_lsn)); *tail_blk = BLOCK_LSN(be64_to_cpu(rhead->h_tail_lsn));
...@@ -3166,7 +3166,7 @@ xlog_recover_inode_pass2( ...@@ -3166,7 +3166,7 @@ xlog_recover_inode_pass2(
default: default:
xfs_warn(log->l_mp, "%s: Invalid flag", __func__); xfs_warn(log->l_mp, "%s: Invalid flag", __func__);
ASSERT(0); ASSERT(0);
error = -EIO; error = -EFSCORRUPTED;
goto out_release; goto out_release;
} }
} }
...@@ -3247,12 +3247,12 @@ xlog_recover_dquot_pass2( ...@@ -3247,12 +3247,12 @@ xlog_recover_dquot_pass2(
recddq = item->ri_buf[1].i_addr; recddq = item->ri_buf[1].i_addr;
if (recddq == NULL) { if (recddq == NULL) {
xfs_alert(log->l_mp, "NULL dquot in %s.", __func__); xfs_alert(log->l_mp, "NULL dquot in %s.", __func__);
return -EIO; return -EFSCORRUPTED;
} }
if (item->ri_buf[1].i_len < sizeof(xfs_disk_dquot_t)) { if (item->ri_buf[1].i_len < sizeof(xfs_disk_dquot_t)) {
xfs_alert(log->l_mp, "dquot too small (%d) in %s.", xfs_alert(log->l_mp, "dquot too small (%d) in %s.",
item->ri_buf[1].i_len, __func__); item->ri_buf[1].i_len, __func__);
return -EIO; return -EFSCORRUPTED;
} }
/* /*
...@@ -3279,7 +3279,7 @@ xlog_recover_dquot_pass2( ...@@ -3279,7 +3279,7 @@ xlog_recover_dquot_pass2(
if (fa) { if (fa) {
xfs_alert(mp, "corrupt dquot ID 0x%x in log at %pS", xfs_alert(mp, "corrupt dquot ID 0x%x in log at %pS",
dq_f->qlf_id, fa); dq_f->qlf_id, fa);
return -EIO; return -EFSCORRUPTED;
} }
ASSERT(dq_f->qlf_len == 1); ASSERT(dq_f->qlf_len == 1);
...@@ -4026,7 +4026,7 @@ xlog_recover_commit_pass1( ...@@ -4026,7 +4026,7 @@ xlog_recover_commit_pass1(
xfs_warn(log->l_mp, "%s: invalid item type (%d)", xfs_warn(log->l_mp, "%s: invalid item type (%d)",
__func__, ITEM_TYPE(item)); __func__, ITEM_TYPE(item));
ASSERT(0); ASSERT(0);
return -EIO; return -EFSCORRUPTED;
} }
} }
...@@ -4074,7 +4074,7 @@ xlog_recover_commit_pass2( ...@@ -4074,7 +4074,7 @@ xlog_recover_commit_pass2(
xfs_warn(log->l_mp, "%s: invalid item type (%d)", xfs_warn(log->l_mp, "%s: invalid item type (%d)",
__func__, ITEM_TYPE(item)); __func__, ITEM_TYPE(item));
ASSERT(0); ASSERT(0);
return -EIO; return -EFSCORRUPTED;
} }
} }
...@@ -4195,7 +4195,7 @@ xlog_recover_add_to_cont_trans( ...@@ -4195,7 +4195,7 @@ xlog_recover_add_to_cont_trans(
ASSERT(len <= sizeof(struct xfs_trans_header)); ASSERT(len <= sizeof(struct xfs_trans_header));
if (len > sizeof(struct xfs_trans_header)) { if (len > sizeof(struct xfs_trans_header)) {
xfs_warn(log->l_mp, "%s: bad header length", __func__); xfs_warn(log->l_mp, "%s: bad header length", __func__);
return -EIO; return -EFSCORRUPTED;
} }
xlog_recover_add_item(&trans->r_itemq); xlog_recover_add_item(&trans->r_itemq);
...@@ -4251,13 +4251,13 @@ xlog_recover_add_to_trans( ...@@ -4251,13 +4251,13 @@ xlog_recover_add_to_trans(
xfs_warn(log->l_mp, "%s: bad header magic number", xfs_warn(log->l_mp, "%s: bad header magic number",
__func__); __func__);
ASSERT(0); ASSERT(0);
return -EIO; return -EFSCORRUPTED;
} }
if (len > sizeof(struct xfs_trans_header)) { if (len > sizeof(struct xfs_trans_header)) {
xfs_warn(log->l_mp, "%s: bad header length", __func__); xfs_warn(log->l_mp, "%s: bad header length", __func__);
ASSERT(0); ASSERT(0);
return -EIO; return -EFSCORRUPTED;
} }
/* /*
...@@ -4293,7 +4293,7 @@ xlog_recover_add_to_trans( ...@@ -4293,7 +4293,7 @@ xlog_recover_add_to_trans(
in_f->ilf_size); in_f->ilf_size);
ASSERT(0); ASSERT(0);
kmem_free(ptr); kmem_free(ptr);
return -EIO; return -EFSCORRUPTED;
} }
item->ri_total = in_f->ilf_size; item->ri_total = in_f->ilf_size;
...@@ -4397,7 +4397,7 @@ xlog_recovery_process_trans( ...@@ -4397,7 +4397,7 @@ xlog_recovery_process_trans(
default: default:
xfs_warn(log->l_mp, "%s: bad flag 0x%x", __func__, flags); xfs_warn(log->l_mp, "%s: bad flag 0x%x", __func__, flags);
ASSERT(0); ASSERT(0);
error = -EIO; error = -EFSCORRUPTED;
break; break;
} }
if (error || freeit) if (error || freeit)
...@@ -4477,7 +4477,7 @@ xlog_recover_process_ophdr( ...@@ -4477,7 +4477,7 @@ xlog_recover_process_ophdr(
xfs_warn(log->l_mp, "%s: bad clientid 0x%x", xfs_warn(log->l_mp, "%s: bad clientid 0x%x",
__func__, ohead->oh_clientid); __func__, ohead->oh_clientid);
ASSERT(0); ASSERT(0);
return -EIO; return -EFSCORRUPTED;
} }
/* /*
...@@ -4487,7 +4487,7 @@ xlog_recover_process_ophdr( ...@@ -4487,7 +4487,7 @@ xlog_recover_process_ophdr(
if (dp + len > end) { if (dp + len > end) {
xfs_warn(log->l_mp, "%s: bad length 0x%x", __func__, len); xfs_warn(log->l_mp, "%s: bad length 0x%x", __func__, len);
WARN_ON(1); WARN_ON(1);
return -EIO; return -EFSCORRUPTED;
} }
trans = xlog_recover_ophdr_to_trans(rhash, rhead, ohead); trans = xlog_recover_ophdr_to_trans(rhash, rhead, ohead);
...@@ -5219,7 +5219,7 @@ xlog_valid_rec_header( ...@@ -5219,7 +5219,7 @@ xlog_valid_rec_header(
(be32_to_cpu(rhead->h_version) & (~XLOG_VERSION_OKBITS))))) { (be32_to_cpu(rhead->h_version) & (~XLOG_VERSION_OKBITS))))) {
xfs_warn(log->l_mp, "%s: unrecognised log version (%d).", xfs_warn(log->l_mp, "%s: unrecognised log version (%d).",
__func__, be32_to_cpu(rhead->h_version)); __func__, be32_to_cpu(rhead->h_version));
return -EIO; return -EFSCORRUPTED;
} }
/* LR body must have data or it wouldn't have been written */ /* LR body must have data or it wouldn't have been written */
......
...@@ -497,7 +497,7 @@ xfs_cui_recover( ...@@ -497,7 +497,7 @@ xfs_cui_recover(
*/ */
set_bit(XFS_CUI_RECOVERED, &cuip->cui_flags); set_bit(XFS_CUI_RECOVERED, &cuip->cui_flags);
xfs_cui_release(cuip); xfs_cui_release(cuip);
return -EIO; return -EFSCORRUPTED;
} }
} }
......
...@@ -541,7 +541,7 @@ xfs_rui_recover( ...@@ -541,7 +541,7 @@ xfs_rui_recover(
*/ */
set_bit(XFS_RUI_RECOVERED, &ruip->rui_flags); set_bit(XFS_RUI_RECOVERED, &ruip->rui_flags);
xfs_rui_release(ruip); xfs_rui_release(ruip);
return -EIO; return -EFSCORRUPTED;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment