]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Disallow zvol-backed ZFS pools
authorasomers <asomers@FreeBSD.org>
Tue, 19 Jan 2016 17:00:25 +0000 (17:00 +0000)
committerasomers <asomers@FreeBSD.org>
Tue, 19 Jan 2016 17:00:25 +0000 (17:00 +0000)
commit5127f80e63d0d5eeabc1b096e19d41fc98aa83fa
treead487037ec17ef92706df2a4069bac1dc8e6d935
parent14172c52f89fa504003826ed2e4e2c0ac246505d
Disallow zvol-backed ZFS pools

Using zvols as backing devices for ZFS pools is fraught with panics and
deadlocks. For example, attempting to online a missing device in the
presence of a zvol can cause a panic when vdev_geom tastes the zvol.  Better
to completely disable vdev_geom from ever opening a zvol. The solution
relies on setting a thread-local variable during vdev_geom_open, and
returning EOPNOTSUPP during zvol_open if that thread-local variable is set.

Remove the check for MUTEX_HELD(&zfsdev_state_lock) in zvol_open. Its intent
was to prevent a recursive mutex acquisition panic. However, the new check
for the thread-local variable also fixes that problem.

Also, fix a panic in vdev_geom_taste_orphan. For an unknown reason, this
function was set to panic. But it can occur that a device disappears during
tasting, and it causes no problems to ignore this departure.

Reviewed by: delphij
MFC after: 1 week
Relnotes: yes
Sponsored by: Spectra Logic Corp
Differential Revision: https://reviews.freebsd.org/D4986
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/vdev_impl.h
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c