The branch stable/13 has been updated by mm:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=f08e17c8a251210b58d63b52bfe1a77dccff6e78

commit f08e17c8a251210b58d63b52bfe1a77dccff6e78
Author:     Martin Matuska <m...@freebsd.org>
AuthorDate: 2021-03-03 01:25:03 +0000
Commit:     Martin Matuska <m...@freebsd.org>
CommitDate: 2021-03-03 01:25:03 +0000

    zfs: fix overly broad locking in spa_vdev_config_exit()
    
    Resolves a deadlock which can occur when the ZED or zpool
    command attaches a new device.
    
    From the openzfs 75a089ed3 commit message:
      Calling vdev_free() only requires the we acquire the spa config
      SCL_STATE_ALL locks, not the SCL_ALL locks.  In particular, we need
      need to avoid taking the SCL_CONFIG lock (included in SCL_ALL) as a
      writer since this can lead to a deadlock.  The txg_sync_thread() may
      block in spa_txg_history_init_io() when taking the SCL_CONFIG lock
      as a reading when it detects there's a pending writer.
    
    Obtained from:  openzfs/zfs@75a089ed34befb8d11df9be92a4438cc49554bf6
    MFS after:      3 days
    
    (direct commit)
---
 sys/contrib/openzfs/module/zfs/spa_misc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sys/contrib/openzfs/module/zfs/spa_misc.c 
b/sys/contrib/openzfs/module/zfs/spa_misc.c
index f49be8eec01a..f11ec0f60574 100644
--- a/sys/contrib/openzfs/module/zfs/spa_misc.c
+++ b/sys/contrib/openzfs/module/zfs/spa_misc.c
@@ -1275,9 +1275,9 @@ spa_vdev_config_exit(spa_t *spa, vdev_t *vd, uint64_t 
txg, int error, char *tag)
                 */
                vdev_autotrim_stop_wait(vd);
 
-               spa_config_enter(spa, SCL_ALL, spa, RW_WRITER);
+               spa_config_enter(spa, SCL_STATE_ALL, spa, RW_WRITER);
                vdev_free(vd);
-               spa_config_exit(spa, SCL_ALL, spa);
+               spa_config_exit(spa, SCL_STATE_ALL, spa);
        }
 
        /*
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to