git: f08e17c8a251 - stable/13 - zfs: fix overly broad locking in spa_vdev_config_exit()
Martin Matuska
mm at FreeBSD.org
Wed Mar 3 02:00:48 UTC 2021
The branch stable/13 has been updated by mm:
URL: https://cgit.FreeBSD.org/src/commit/?id=f08e17c8a251210b58d63b52bfe1a77dccff6e78
commit f08e17c8a251210b58d63b52bfe1a77dccff6e78
Author: Martin Matuska <mm at FreeBSD.org>
AuthorDate: 2021-03-03 01:25:03 +0000
Commit: Martin Matuska <mm at 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 at 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);
}
/*
More information about the dev-commits-src-all
mailing list