git: c70690631443 - stable/13 - zfs: fix vdev_rebuild_thread deadlock

Martin Matuska mm at FreeBSD.org
Wed Mar 3 02:01:15 UTC 2021


The branch stable/13 has been updated by mm:

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

commit c7069063144395b025c0ef178431eb2cafdbe1ca
Author:     Martin Matuska <mm at FreeBSD.org>
AuthorDate: 2021-03-03 01:28:56 +0000
Commit:     Martin Matuska <mm at FreeBSD.org>
CommitDate: 2021-03-03 01:28:56 +0000

    zfs: fix vdev_rebuild_thread deadlock
    
    From the openzfs 8e43fa12c commit message:
      The metaslab_disable() call may block waiting for a txg sync.
      Therefore it's important that vdev_rebuild_thread release the
      SCL_CONFIG read lock it is holding before this call.  Failure
      to do so can result in the txg_sync thread getting blocked
      waiting for this lock which results in a deadlock.
    
    Obtained from:  openzfs/zfs at 8e43fa12c571878f32119122771888ab9092a75a
    MFS after:      3 days
    
    (direct commit)
---
 sys/contrib/openzfs/module/zfs/vdev_rebuild.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/contrib/openzfs/module/zfs/vdev_rebuild.c b/sys/contrib/openzfs/module/zfs/vdev_rebuild.c
index 784d1af15a81..112c04d0ba04 100644
--- a/sys/contrib/openzfs/module/zfs/vdev_rebuild.c
+++ b/sys/contrib/openzfs/module/zfs/vdev_rebuild.c
@@ -804,8 +804,8 @@ vdev_rebuild_thread(void *arg)
 		ASSERT0(range_tree_space(vr->vr_scan_tree));
 
 		/* Disable any new allocations to this metaslab */
-		metaslab_disable(msp);
 		spa_config_exit(spa, SCL_CONFIG, FTAG);
+		metaslab_disable(msp);
 
 		mutex_enter(&msp->ms_sync_lock);
 		mutex_enter(&msp->ms_lock);


More information about the dev-commits-src-all mailing list