HomeFreeBSD

zfs: fix overly broad locking in spa_vdev_config_exit()

Description

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
Approved by: re (delphij)

(cherry picked from commit f08e17c8a251210b58d63b52bfe1a77dccff6e78)

Details

Provenance
mmAuthored on Mar 3 2021, 1:25 AM
Parents
rG8d25741b633a: growfs: allow operation on RW-mounted filesystems
Branches
Unknown
Tags
Unknown