From d2b0ca953f16d7b33f747369fceb55a89eb51b2e Mon Sep 17 00:00:00 2001 From: Pavel Snajdr Date: Tue, 26 Nov 2024 00:37:56 +0100 Subject: [PATCH] Assert if we're logging after final txg was set This allowed to debug #16714, fixed in #16782. Without assertions added here it is difficult to figure out what logs cause the problem, since the assertion happens in sync thread context. Reviewed-by: Brian Behlendorf Signed-off-by: Pavel Snajdr Co-authored-by: Alexander Motin Closes #16795 --- module/zfs/spa_history.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/module/zfs/spa_history.c b/module/zfs/spa_history.c index de036d6c3718..81bb99eb2ccd 100644 --- a/module/zfs/spa_history.c +++ b/module/zfs/spa_history.c @@ -390,6 +390,9 @@ spa_history_log_nvl(spa_t *spa, nvlist_t *nvl) return (err); } + ASSERT3UF(tx->tx_txg, <=, spa_final_dirty_txg(spa), + "Logged %s after final txg was set!", "nvlist"); + VERIFY0(nvlist_dup(nvl, &nvarg, KM_SLEEP)); if (spa_history_zone() != NULL) { fnvlist_add_string(nvarg, ZPOOL_HIST_ZONE, @@ -527,6 +530,9 @@ log_internal(nvlist_t *nvl, const char *operation, spa_t *spa, return; } + ASSERT3UF(tx->tx_txg, <=, spa_final_dirty_txg(spa), + "Logged after final txg was set: %s %s", operation, fmt); + msg = kmem_vasprintf(fmt, adx); fnvlist_add_string(nvl, ZPOOL_HIST_INT_STR, msg); kmem_strfree(msg);