Date: Wed, 9 May 2007 19:05:09 GMT From: Ulf Lilleengen <lulf@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 119590 for review Message-ID: <200705091905.l49J59ub041281@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=119590 Change 119590 by lulf@lulf_vimes on 2007/05/09 19:04:17 - Modify gv_resetconfig to use the event system in a different way. Instead of posting lots of events, create a resetconfig event that will be posted when userland requests it. Affected files ... .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.c#8 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.h#6 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_rm.c#5 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_var.h#6 edit Differences ... ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.c#8 (text+ko) ==== @@ -345,7 +345,7 @@ gv_rename(gp, req); } else if (!strcmp(verb, "resetconfig")) { - gv_resetconfig(sc, req); + gv_post_event(sc, GV_EVENT_RESET_CONFIG, sc, NULL, NULL); #if 0 } else if (!strcmp(verb, "start")) { @@ -560,6 +560,14 @@ g_free(ev->arg3); break; + case GV_EVENT_RESET_CONFIG: + printf("VINUM: event 'resetconfig'\n"); + err = gv_resetconfig(sc); + if (err) + printf("VINUM: error resetting config: " + "%d\n", err); + break; + case GV_EVENT_THREAD_EXIT: printf("VINUM: event 'thread exit'\n"); g_free(ev); ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.h#6 (text+ko) ==== @@ -51,7 +51,7 @@ /* geom_vinum_rm.c */ void gv_remove(struct g_geom *, struct gctl_req *); -int gv_resetconfig(struct gv_softc *, struct gctl_req *); +int gv_resetconfig(struct gv_softc *); void gv_rm_sd(struct gv_softc *sc, struct gv_sd *s); void gv_rm_drive(struct gv_softc *, struct gv_drive *); void gv_rm_plex(struct gv_softc *, struct gv_plex *); ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_rm.c#5 (text+ko) ==== @@ -154,7 +154,7 @@ /* Resets configuration */ int -gv_resetconfig(struct gv_softc *sc, struct gctl_req *req) +gv_resetconfig(struct gv_softc *sc) { struct gv_drive *d, *d2; struct gv_volume *v, *v2; @@ -164,19 +164,18 @@ /* First make sure nothing is open. */ LIST_FOREACH_SAFE(d, &sc->drives, drive, d2) { if (gv_consumer_is_open(d->consumer)) { - gctl_error(req, "drive '%s' is busy", d->name); return (GV_ERR_ISOPEN); } } /* Then if not, we remove everything. */ + LIST_FOREACH_SAFE(d, &sc->drives, drive, d2) + gv_rm_drive(sc, d); + LIST_FOREACH_SAFE(s, &sc->subdisks, sd, s2) + gv_rm_sd(sc, s); + LIST_FOREACH_SAFE(p, &sc->plexes, plex, p2) + gv_rm_plex(sc, p); LIST_FOREACH_SAFE(v, &sc->volumes, volume, v2) - gv_post_event(sc, GV_EVENT_RM_VOLUME, v, NULL, NULL); - LIST_FOREACH_SAFE(p, &sc->plexes, plex, p2) - gv_post_event(sc, GV_EVENT_RM_PLEX, p, NULL, NULL); - LIST_FOREACH_SAFE(s, &sc->subdisks, sd, s2) - gv_post_event(sc, GV_EVENT_RM_SD, s, NULL, NULL); - LIST_FOREACH_SAFE(d, &sc->drives, drive, d2) - gv_post_event(sc, GV_EVENT_RM_DRIVE, d, NULL, NULL); + gv_rm_vol(sc, v); gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, NULL); ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_var.h#6 (text+ko) ==== @@ -189,6 +189,7 @@ #define GV_EVENT_SET_DRIVE_STATE 14 #define GV_EVENT_SET_VOL_STATE 15 #define GV_EVENT_SET_PLEX_STATE 16 +#define GV_EVENT_RESET_CONFIG 17 struct gv_event { int type;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200705091905.l49J59ub041281>