Drop of spa_namespace lock in vdev_geom.c
Pawel Jakub Dawidek
pjd at FreeBSD.org
Mon Jun 13 20:15:53 UTC 2011
On Fri, Jun 10, 2011 at 11:32:52AM -0600, Justin T. Gibbs wrote:
> Dropping and reacquiring the spa_namespace lock in vdev_geom_open()
> creates a lock order reversal with the spa_config locks. As the
> spa_config locks are not standard mutexes, witness will not warn
> about this issue. I only noticed this problem when debugging a ZFS
> deadlock. The deadlock can be triggered anytime that there are
> multiple insert/remove processes going on (e.g. vdev orphan processing
> while a fault management daemon is onlining a replacement device for
> some other vdev).
>
> I haven't noticed any issues with just holding the namespace lock
> for the duration of the open. Does anyone know why this lock drop
> was added in v28?
I did that as part of @182208 to fix another LOR. Full commit log:
Change 182208 on 2010/08/10 by pjd at pjd_zoo
OpenSolaris switched to lazy creation of /dev/ entires for ZVOLs.
It creates /dev/ entries on VOP_LOOKUP() or VOP_READDIR().
This of course can't work this way on FreeBSD with GEOM, so we need
to create ZVOL providers where appropriate. I found the following
cases:
1. Pool first open (pool is loaded based on zpool/cache configuration
and is then opened for a first time on eg. zfs mount).
2. Pool import. It's not the same as 1.
3. ZVOL creation: zfs create -V<size> <zvol>.
4. Creation of ZVOL snapshot, this includes recursive snapshot
creation.
To make it work I had to fix LOR between the zfsdev_state_lock, the
GEOM topology lock and the spa_namespace_lock. They are now always
obtained in the following order:
1. zfsdev_state_lock
2. g_topology_lock
3. spa_namespace_lock
Also, we can't use taskqueue to scan for VDEVs as this introduces
deadlock (because there is no way to honour the order above).
This also allows to simplify vdev_geom.c quite a bit as it is no
longer a problem to taste ZVOL or ZVOL-based provider.
Update /etc/rc.d/zvol as there are no longer volinit and volfini
subcommands to zfs(8).
--
Pawel Jakub Dawidek http://www.wheelsystems.com
FreeBSD committer http://www.FreeBSD.org
Am I Evil? Yes, I Am! http://yomoli.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20110613/bde2da13/attachment.pgp
More information about the freebsd-fs
mailing list