Alexander, I think that g_retaste_event may have a problem along the lines that we discussed on IRC but in a little bit different context. Namely, if we find a connected non-orphaned consumer belonging to a geom of a target class, then we mark the consumer as orphaned and call g_wither_geom on its geom. Then we call taste method of the target class on the provider in question. But since g_wither_geom initiates an asynchronous operation the withered geom will still exist and we may create a new "duplicate" geom beside it. That could result in resource conflict or in confusion in the upper layers. E.g. if the class would be geom_dev, then the newly attached geom won't be able to create a devfs entry, because the withering geom still has it. I hope that miss something in this scenario...
P.S. Also, the code seems to wither/orphan only the first of qualified geoms/consumers. I am not sure if it's safe to assume that only one geom of a given class could be attached to a provider. Hypothetically different instances/geoms of the same class could be using some provider for different reasons and purposes. -- Andriy Gapon _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-geom To unsubscribe, send any mail to "[email protected]"
