HomeFreeBSD

MFC r318189:

Description

MFC r318189:

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.

sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c

  • 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 vdev_geom_set_rotation_rate
  • 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.

PR: 218634
Reviewed by: gibbs
Sponsored by: Spectra Logic Corp
Differential Revision: https://reviews.freebsd.org/D10391

Details

Provenance
asomersAuthored on
Reviewer
gibbs
Differential Revision
D10391: vdev_geom may associate multiple vdevs per g_consumer
Parents
rS318647: Add support for Amazon Elastic Network Adapter (ENA) NIC
Branches
Unknown
Tags
Unknown