xfs: splice unsorted log items back to the transaction after the loop

On error, xlog_recover_reorder_trans() splices the leftover sort_list
items back to trans->r_itemq inside the loop before breaking out.  The
loop tail already splices the per-fate lists back, so do sort_list there
too, guarded by the assert that used to sit after the loop.

No functional change.  It drops the duplicated splice so the next patch
can add another error case without repeating it.

Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Weiming Shi <bestswngs@gmail.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
Weiming Shi 2026-07-02 09:19:59 -07:00 committed by Carlos Maiolino
parent 5b4396e12c
commit 34dd225341

View File

@ -1912,12 +1912,6 @@ xlog_recover_reorder_trans(
xfs_warn(log->l_mp,
"%s: unrecognized type of log operation (%d)",
__func__, ITEM_TYPE(item));
/*
* return the remaining items back to the transaction
* item list so they can be freed in caller.
*/
if (!list_empty(&sort_list))
list_splice_init(&sort_list, &trans->r_itemq);
error = -EFSCORRUPTED;
break;
}
@ -1945,7 +1939,15 @@ xlog_recover_reorder_trans(
}
}
ASSERT(list_empty(&sort_list));
/*
* Return the remaining items back to the transaction item list so they
* can be freed in caller. This should only happen when we encounter
* an error.
*/
if (!list_empty(&sort_list)) {
ASSERT(error);
list_splice_init(&sort_list, &trans->r_itemq);
}
if (!list_empty(&buffer_list))
list_splice(&buffer_list, &trans->r_itemq);
if (!list_empty(&item_list))