aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_log_recover.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
-rw-r--r--fs/xfs/xfs_log_recover.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 957b8caddf1..418582b709e 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -3017,7 +3017,7 @@ xlog_recover_process_efi(
3017 } 3017 }
3018 3018
3019 efip->efi_flags |= XFS_EFI_RECOVERED; 3019 efip->efi_flags |= XFS_EFI_RECOVERED;
3020 xfs_trans_commit(tp, 0); 3020 error = xfs_trans_commit(tp, 0);
3021 return error; 3021 return error;
3022} 3022}
3023 3023
@@ -3131,16 +3131,13 @@ xlog_recover_clear_agi_bucket(
3131 error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, 3131 error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp,
3132 XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)), 3132 XFS_AG_DADDR(mp, agno, XFS_AGI_DADDR(mp)),
3133 XFS_FSS_TO_BB(mp, 1), 0, &agibp); 3133 XFS_FSS_TO_BB(mp, 1), 0, &agibp);
3134 if (error) { 3134 if (error)
3135 xfs_trans_cancel(tp, XFS_TRANS_ABORT); 3135 goto out_abort;
3136 return;
3137 }
3138 3136
3137 error = EINVAL;
3139 agi = XFS_BUF_TO_AGI(agibp); 3138 agi = XFS_BUF_TO_AGI(agibp);
3140 if (be32_to_cpu(agi->agi_magicnum) != XFS_AGI_MAGIC) { 3139 if (be32_to_cpu(agi->agi_magicnum) != XFS_AGI_MAGIC)
3141 xfs_trans_cancel(tp, XFS_TRANS_ABORT); 3140 goto out_abort;
3142 return;
3143 }
3144 3141
3145 agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO); 3142 agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO);
3146 offset = offsetof(xfs_agi_t, agi_unlinked) + 3143 offset = offsetof(xfs_agi_t, agi_unlinked) +
@@ -3148,7 +3145,17 @@ xlog_recover_clear_agi_bucket(
3148 xfs_trans_log_buf(tp, agibp, offset, 3145 xfs_trans_log_buf(tp, agibp, offset,
3149 (offset + sizeof(xfs_agino_t) - 1)); 3146 (offset + sizeof(xfs_agino_t) - 1));
3150 3147
3151 (void) xfs_trans_commit(tp, 0); 3148 error = xfs_trans_commit(tp, 0);
3149 if (error)
3150 goto out_error;
3151 return;
3152
3153out_abort:
3154 xfs_trans_cancel(tp, XFS_TRANS_ABORT);
3155out_error:
3156 xfs_fs_cmn_err(CE_WARN, mp, "xlog_recover_clear_agi_bucket: "
3157 "failed to clear agi %d. Continuing.", agno);
3158 return;
3152} 3159}
3153 3160
3154/* 3161/*