If freeing an extent fails during recovery, then the filesystem will be forced down with the EFI entry still on the AIL. This will result in hanging the function xfs_ail_push_all_sync(). This patch is similar to the patches that removed the dquot and inode in commits 32ce90a and dea9609. Found by mounting an metadata dump that triggers a XFS_WANT_CORRUPTED_RETURN() on log recovery. Signed-off-by: Mark Tinguely <tinguely@xxxxxxx> --- fs/xfs/xfs_log_recover.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) Index: b/fs/xfs/xfs_log_recover.c =================================================================== --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -3668,7 +3668,7 @@ xlog_recover_process_efi( extp = &(efip->efi_format.efi_extents[i]); error = xfs_free_extent(tp, extp->ext_start, extp->ext_len); if (error) - goto abort_error; + goto free_abort; xfs_trans_log_efd_extent(tp, efdp, extp->ext_start, extp->ext_len); } @@ -3677,6 +3677,9 @@ xlog_recover_process_efi( error = xfs_trans_commit(tp, 0); return error; +free_abort: + set_bit(XFS_EFI_RECOVERED, &efip->efi_flags); + xfs_efi_release(efip, efip->efi_format.efi_nextents); abort_error: xfs_trans_cancel(tp, XFS_TRANS_ABORT); return error; _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs