vdev_geom may associate multiple vdevs per g_consumer
vdev_geom.c currently uses the g_consumer's private field to point to a
vdev_t. That way, a GEOM event can cause a change to a ZFS vdev. For
example, when you remove a disk, the vdev's status will change to REMOVED.
However, vdev_geom will sometimes attach multiple vdevs to the same GEOM
consumer. If this happens, then geom events will only be propagated to one
of the vdevs.
Fix this by storing a linked list of vdevs in g_consumer's private field.
- g_consumer.private now stores a linked list of vdev pointers
associated with the consumer instead of just a single vdev pointer.
- Change vdev_geom_set_physpath's signature to more closely match
- Don't bother calling g_access in vdev_geom_set_physpath. It's
guaranteed that we've already accessed the consumer by the time we get here.
- Don't call vdev_geom_set_physpath in vdev_geom_attach. Instead,
call it in vdev_geom_open, after we know that the open has succeeded.