Index: geom_event.c =================================================================== RCS file: /usr/repo/src/sys/geom/geom_event.c,v retrieving revision 1.54 diff -u -p -r1.54 geom_event.c --- geom_event.c 4 Sep 2005 19:14:19 -0000 1.54 +++ geom_event.c 4 Nov 2005 19:25:12 -0000 @@ -50,6 +50,7 @@ __FBSDID("$FreeBSD: src/sys/geom/geom_ev #include #include #include +#include #include #include @@ -71,12 +72,29 @@ struct g_event { void *arg; int flag; void *ref[G_N_EVENTREFS]; + struct stack stack; }; #define EV_DONE 0x80000 #define EV_WAKEUP 0x40000 #define EV_CANCELED 0x20000 +/* + * For use from DDB. + */ +void +g_show_events(void) +{ + struct g_event *ep; + + printf("%s: START\n", __func__); + TAILQ_FOREACH(ep, &g_events, events) { + printf("EVENT_FUNC: %p\n", ep->func); + stack_print(&ep->stack); + } + printf("%s: END\n", __func__); +} + void g_waitidle(void) { @@ -297,6 +315,7 @@ g_post_event_x(g_event_t *func, void *ar KASSERT(p == NULL, ("Too many references to event")); ep->func = func; ep->arg = arg; + stack_save(&ep->stack); mtx_lock(&g_eventlock); TAILQ_INSERT_TAIL(&g_events, ep, events); mtx_unlock(&g_eventlock); Index: geom.h =================================================================== RCS file: /usr/repo/src/sys/geom/geom.h,v retrieving revision 1.91 diff -u -p -r1.91 geom.h --- geom.h 3 Sep 2005 11:03:10 -0000 1.91 +++ geom.h 4 Nov 2005 19:25:17 -0000 @@ -215,6 +215,7 @@ int g_waitfor_event(g_event_t *func, voi void g_cancel_event(void *ref); void g_orphan_provider(struct g_provider *pp, int error); void g_waitidlelock(void); +void g_show_events(void); /* geom_subr.c */ int g_access(struct g_consumer *cp, int nread, int nwrite, int nexcl);