]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
zfs: fix overly broad locking in spa_vdev_config_exit()
authorMartin Matuska <mm@FreeBSD.org>
Wed, 3 Mar 2021 01:25:03 +0000 (02:25 +0100)
committerMartin Matuska <mm@FreeBSD.org>
Sat, 6 Mar 2021 20:23:22 +0000 (21:23 +0100)
commit2fa2d50ead44d148482a05284f5c3524475c8e6e
tree957a54fd8faa84e5f7fa14a37d0260ca8b54aa2a
parent8d25741b633af6652fe8bfff1cb157a31e66cc60
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)
sys/contrib/openzfs/module/zfs/spa_misc.c