[XFS] Propagate errors from xfs_trans_commit().
xfs_trans_commit() can return errors when there are problems in the transaction subsystem. They are indicative that the entire transaction may be incomplete, and hence the error should be propagated as there is a good possibility that there is something fatally wrong in the filesystem. Catch and propagate or warn about commit errors in the places where they are currently ignored. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30795a Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Niv Sardi <xaiki@sgi.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
committed by
Lachlan McIlroy
parent
3c1e2bbe5b
commit
e5720eec05
@ -3017,7 +3017,7 @@ xlog_recover_process_efi(
|
||||
}
|
||||
|
||||
efip->efi_flags |= XFS_EFI_RECOVERED;
|
||||
xfs_trans_commit(tp, 0);
|
||||
error = xfs_trans_commit(tp, 0);
|
||||
return error;
|
||||
}
|
||||
|
||||
@ -3131,16 +3131,13 @@ xlog_recover_clear_agi_bucket(
|
||||
error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp,
|
||||
XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)),
|
||||
XFS_FSS_TO_BB(mp, 1), 0, &agibp);
|
||||
if (error) {
|
||||
xfs_trans_cancel(tp, XFS_TRANS_ABORT);
|
||||
return;
|
||||
}
|
||||
if (error)
|
||||
goto out_abort;
|
||||
|
||||
error = EINVAL;
|
||||
agi = XFS_BUF_TO_AGI(agibp);
|
||||
if (be32_to_cpu(agi->agi_magicnum) != XFS_AGI_MAGIC) {
|
||||
xfs_trans_cancel(tp, XFS_TRANS_ABORT);
|
||||
return;
|
||||
}
|
||||
if (be32_to_cpu(agi->agi_magicnum) != XFS_AGI_MAGIC)
|
||||
goto out_abort;
|
||||
|
||||
agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO);
|
||||
offset = offsetof(xfs_agi_t, agi_unlinked) +
|
||||
@ -3148,7 +3145,17 @@ xlog_recover_clear_agi_bucket(
|
||||
xfs_trans_log_buf(tp, agibp, offset,
|
||||
(offset + sizeof(xfs_agino_t) - 1));
|
||||
|
||||
(void) xfs_trans_commit(tp, 0);
|
||||
error = xfs_trans_commit(tp, 0);
|
||||
if (error)
|
||||
goto out_error;
|
||||
return;
|
||||
|
||||
out_abort:
|
||||
xfs_trans_cancel(tp, XFS_TRANS_ABORT);
|
||||
out_error:
|
||||
xfs_fs_cmn_err(CE_WARN, mp, "xlog_recover_clear_agi_bucket: "
|
||||
"failed to clear agi %d. Continuing.", agno);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user