From 3eb8c738fd84be595e31f25fa4757bb5a4ccef28 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Mon, 12 May 2003 20:15:28 +0000 Subject: [PATCH] When a disk disappears, destroy the class from the event thread to avoid race condtion. Approved by: re/rwatson --- sys/geom/geom_disk.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c index f36ec057aec..73c72219854 100644 --- a/sys/geom/geom_disk.c +++ b/sys/geom/geom_disk.c @@ -345,6 +345,15 @@ disk_create(int unit, struct disk *dp, int flags, void *unused __unused, void * * XXX: disk_create() and disk_destroy() is currently undefined (but generally * XXX: undesirable) so any solution seems to involve an intrusive decision. */ + +static void +disk_destroy_event(void *ptr, int flag) +{ + + g_topology_assert(); + g_wither_geom(ptr, ENXIO); +} + void disk_destroy(struct disk *dp) { @@ -356,7 +365,7 @@ disk_destroy(struct disk *dp) return; gp->softc = NULL; devstat_remove_entry(dp->d_devstat); - g_wither_geom(gp, ENXIO); + g_post_event(disk_destroy_event, gp, M_WAITOK, NULL, NULL); } static void