]> git.proxmox.com Git - mirror_zfs.git/commitdiff
ZIL: Tune some assertions.
authorAlexander Motin <mav@FreeBSD.org>
Sat, 2 Sep 2023 00:13:22 +0000 (20:13 -0400)
committerGitHub <noreply@github.com>
Sat, 2 Sep 2023 00:13:22 +0000 (17:13 -0700)
In zil_free_lwb() we should first assert lwb_state or the rest of
assertions can be misleading if it is false.

Add lwb_state assertions in zil_lwb_add_block() to make sure we are
not trying to add elements to lwb_vdev_tree after it was processed.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Sponsored by: iXsystems, Inc.
Closes #15227

module/zfs/zil.c

index f2d279e36a963b1a8a8ce3a9ffb47e68a7c1e165..be3311b031cc6ca114591da4cf77402b6a7ca12b 100644 (file)
@@ -814,17 +814,17 @@ static void
 zil_free_lwb(zilog_t *zilog, lwb_t *lwb)
 {
        ASSERT(MUTEX_HELD(&zilog->zl_lock));
-       ASSERT(!MUTEX_HELD(&lwb->lwb_vdev_lock));
-       VERIFY(list_is_empty(&lwb->lwb_waiters));
-       VERIFY(list_is_empty(&lwb->lwb_itxs));
-       ASSERT(avl_is_empty(&lwb->lwb_vdev_tree));
+       ASSERT(lwb->lwb_state == LWB_STATE_NEW ||
+           lwb->lwb_state == LWB_STATE_FLUSH_DONE);
        ASSERT3P(lwb->lwb_child_zio, ==, NULL);
        ASSERT3P(lwb->lwb_write_zio, ==, NULL);
        ASSERT3P(lwb->lwb_root_zio, ==, NULL);
        ASSERT3U(lwb->lwb_alloc_txg, <=, spa_syncing_txg(zilog->zl_spa));
        ASSERT3U(lwb->lwb_max_txg, <=, spa_syncing_txg(zilog->zl_spa));
-       ASSERT(lwb->lwb_state == LWB_STATE_NEW ||
-           lwb->lwb_state == LWB_STATE_FLUSH_DONE);
+       VERIFY(list_is_empty(&lwb->lwb_itxs));
+       VERIFY(list_is_empty(&lwb->lwb_waiters));
+       ASSERT(avl_is_empty(&lwb->lwb_vdev_tree));
+       ASSERT(!MUTEX_HELD(&lwb->lwb_vdev_lock));
 
        /*
         * Clear the zilog's field to indicate this lwb is no longer
@@ -1329,6 +1329,9 @@ zil_lwb_add_block(lwb_t *lwb, const blkptr_t *bp)
        int ndvas = BP_GET_NDVAS(bp);
        int i;
 
+       ASSERT3S(lwb->lwb_state, !=, LWB_STATE_WRITE_DONE);
+       ASSERT3S(lwb->lwb_state, !=, LWB_STATE_FLUSH_DONE);
+
        if (zil_nocacheflush)
                return;