From 3cb140863f0cb97b9587ea3f6a01df4c2b66a733 Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Wed, 26 Jul 2023 12:28:01 +1000 Subject: [PATCH] zil_fail: fix infinite loop in commit itx search (cherry picked from commit ba1f888858f8599e10211aa9957d942e7bcc36ce) --- module/zfs/zil.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/module/zfs/zil.c b/module/zfs/zil.c index 39296c86d5..ea0a26826c 100644 --- a/module/zfs/zil.c +++ b/module/zfs/zil.c @@ -1251,13 +1251,16 @@ zil_fail(zilog_t *zilog) * how they can legitimately end up here. */ l = &itxg->itxg_itxs->i_sync_list; - while ((itx = list_head(l)) != NULL) { + itx = list_head(l); + while (itx != NULL) { + itx_t *nitx = list_next(l, itx); if (itx->itx_lr.lrc_txtype == TX_COMMIT) { list_remove(l, itx); list_insert_tail(&waiters, itx->itx_private); itx->itx_private = NULL; zil_itx_destroy(itx); } + itx = nitx; } mutex_exit(&itxg->itxg_lock);