]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Revert "Do not hold spa_config in ZIL while blocked on IO"
authorGeorge Wilson <george.wilson@delphix.com>
Tue, 28 Mar 2023 15:13:32 +0000 (11:13 -0400)
committerGitHub <noreply@github.com>
Tue, 28 Mar 2023 15:13:32 +0000 (08:13 -0700)
This reverts commit 7d638df09be7482935bcf6ec8e4ea2ac8a8be1a8.

Reviewed-by: Prakash Surya <prakash.surya@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: George Wilson <gwilson@delphix.com>
Closes #14678

module/zfs/zil.c

index fba1c19996123ff8fbc074db4ae5704053407ba6..eb26e4b3299844b4ca01033d6cab24ca4710a312 100644 (file)
@@ -1384,6 +1384,8 @@ zil_lwb_flush_vdevs_done(zio_t *zio)
        itx_t *itx;
        uint64_t txg;
 
+       spa_config_exit(zilog->zl_spa, SCL_STATE, lwb);
+
        zio_buf_free(lwb->lwb_buf, lwb->lwb_sz);
 
        mutex_enter(&zilog->zl_lock);
@@ -1522,6 +1524,8 @@ zil_lwb_write_done(zio_t *zio)
        zil_vdev_node_t *zv;
        lwb_t *nlwb;
 
+       ASSERT3S(spa_config_held(spa, SCL_STATE, RW_READER), !=, 0);
+
        ASSERT(BP_GET_COMPRESS(zio->io_bp) == ZIO_COMPRESS_OFF);
        ASSERT(BP_GET_TYPE(zio->io_bp) == DMU_OT_INTENT_LOG);
        ASSERT(BP_GET_LEVEL(zio->io_bp) == 0);
@@ -1583,7 +1587,6 @@ zil_lwb_write_done(zio_t *zio)
                return;
        }
 
-       spa_config_enter(spa, SCL_STATE, FTAG, RW_READER);
        while ((zv = avl_destroy_nodes(t, &cookie)) != NULL) {
                vdev_t *vd = vdev_lookup_top(spa, zv->zv_vdev);
                if (vd != NULL) {
@@ -1599,7 +1602,6 @@ zil_lwb_write_done(zio_t *zio)
                }
                kmem_free(zv, sizeof (*zv));
        }
-       spa_config_exit(spa, SCL_STATE, FTAG);
 }
 
 static void
@@ -1878,6 +1880,8 @@ zil_lwb_write_issue(zilog_t *zilog, lwb_t *lwb)
         */
        memset(lwb->lwb_buf + lwb->lwb_nused, 0, wsz - lwb->lwb_nused);
 
+       spa_config_enter(zilog->zl_spa, SCL_STATE, lwb, RW_READER);
+
        zil_lwb_add_block(lwb, &lwb->lwb_blk);
        lwb->lwb_issued_timestamp = gethrtime();
        lwb->lwb_state = LWB_STATE_ISSUED;