On 24.06.2012 8:29, Kenneth D. Merry wrote: > Author: ken > Date: Sun Jun 24 04:29:03 2012 > New Revision: 237518 > URL: http://svn.freebsd.org/changeset/base/237518 > > Log: > Fix a bug which causes a panic in daopen(). The panic is caused by > a da(4) instance going away while GEOM is still probing it. > > In this case, the GEOM disk class instance has been created by > disk_create(), and the taste of the disk is queued in the GEOM > event queue. > > While that event is queued, the da(4) instance goes away. When the > open call comes into the da(4) driver, it dereferences the freed > (but non-NULL) peripheral pointer provided by GEOM, which results > in a panic. > > The solution is to add a callback to the GEOM disk code that is > called when all of its resources are cleaned up. This is > implemented inside GEOM by adding an optional callback that is > called when all consumers have detached from a provider, and the > provider is about to be deleted.
> > geom.h: Add a new, optional, providergone callback that > is called when a provider is about to be deleted. > > MFC after: 5 days This will break ABI. If you want to merge this change, it is better to use one of spare field in the geom structures. > @@ -102,6 +103,7 @@ struct g_class { > g_start_t *start; > g_spoiled_t *spoiled; > g_attrchanged_t *attrchanged; > + g_provgone_t *providergone; > g_dumpconf_t *dumpconf; > g_access_t *access; > g_orphan_t *orphan; > @@ -133,6 +135,7 @@ struct g_geom { > g_start_t *start; > g_spoiled_t *spoiled; > g_attrchanged_t *attrchanged; > + g_provgone_t *providergone; > g_dumpconf_t *dumpconf; > g_access_t *access; > g_orphan_t *orphan; -- WBR, Andrey V. Elsukov
signature.asc
Description: OpenPGP digital signature