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
MFS after: 3 days

(direct commit)

Details

Provenance
mmAuthored on Mar 3 2021, 1:25 AM
Parents
rGc29d3ecdc8b3: rmlock: Add a required compiler membar to the rlock slow path
Branches
Unknown
Tags
Unknown