HomeFreeBSD

Fix a bug that caused da(4) instances to hang around after the underlying

Description

Fix a bug that caused da(4) instances to hang around after the underlying
device is gone.

The problem was that when disk_gone() is called, if the GEOM disk
creation process has not yet happened, the withering process
couldn't start.

We didn't record any state in the GEOM disk code, and so the d_gone()
callback to the da(4) driver never happened.

The solution is to track the state of the creation process, and
initiate the withering process from g_disk_create() if the disk is
being created.

This change does add fields to struct disk, and so I have bumped
DISK_VERSION.

geom_disk.c: Track where we are in the disk creation process,

		and check to see whether our underlying disk has
		gone away or not.

		In disk_gone(), set a new d_goneflag variable that
		g_disk_create() can check to see if it needs to
		clean up the disk instance.

geom_disk.h: Add a mutex to struct disk (for internal use) disk

		init level, and a gone flag.

		Bump DISK_VERSION because the size of struct disk has
		changed and fields have been added at the beginning.

Sponsored by: Spectra Logic
Approved by: re (marius)

Details

Provenance
kenAuthored on
Parents
rS302068: MFC r271049:
Branches
Unknown
Tags
Unknown