Call the detach function with g_waitfor_event() so that it can access
the GEOM topology. There are still issues with not detaching from cam correctly such that upon a device detach there's an invalid pointer dereference from the later call to cam_rescan().
This commit is contained in:
parent
500031481b
commit
590da0d007
@ -181,8 +181,9 @@ acd_attach(struct ata_device *atadev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
acd_detach(struct ata_device *atadev)
|
acd_geom_detach(void *arg, int flag)
|
||||||
{
|
{
|
||||||
|
struct ata_device *atadev = arg;
|
||||||
struct acd_softc *cdp = atadev->softc;
|
struct acd_softc *cdp = atadev->softc;
|
||||||
int subdev;
|
int subdev;
|
||||||
|
|
||||||
@ -215,6 +216,12 @@ acd_detach(struct ata_device *atadev)
|
|||||||
free(cdp, M_ACD);
|
free(cdp, M_ACD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
acd_detach(struct ata_device *atadev)
|
||||||
|
{
|
||||||
|
g_waitfor_event(acd_geom_detach, atadev, M_WAITOK, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static struct acd_softc *
|
static struct acd_softc *
|
||||||
acd_init_lun(struct ata_device *atadev)
|
acd_init_lun(struct ata_device *atadev)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user