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.