Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Jan 2009 11:51:18 +0000 (UTC)
From:      Ulf Lilleengen <lulf@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r187096 - projects/gvinum/sys/geom/vinum
Message-ID:  <200901121151.n0CBpIPN065282@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: lulf
Date: Mon Jan 12 11:51:18 2009
New Revision: 187096
URL: http://svn.freebsd.org/changeset/base/187096

Log:
  - Save configuration automatically after a initialization, rebuild, resync or
    growing.

Modified:
  projects/gvinum/sys/geom/vinum/geom_vinum_plex.c

Modified: projects/gvinum/sys/geom/vinum/geom_vinum_plex.c
==============================================================================
--- projects/gvinum/sys/geom/vinum/geom_vinum_plex.c	Mon Jan 12 11:47:24 2009	(r187095)
+++ projects/gvinum/sys/geom/vinum/geom_vinum_plex.c	Mon Jan 12 11:51:18 2009	(r187096)
@@ -636,6 +636,7 @@ gv_sync_complete(struct gv_plex *to, str
 				gv_set_sd_state(s, GV_SD_UP, 0);
 			to->flags &= ~GV_PLEX_SYNCING;
 			to->synced = 0;
+			gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 		} else {
 			offset = bp->bio_offset + bp->bio_length;
 			err = gv_sync_request(from, to, offset,
@@ -711,12 +712,16 @@ gv_grow_request(struct gv_plex *p, off_t
 void
 gv_grow_complete(struct gv_plex *p, struct bio *bp)
 {
+	struct gv_softc *sc;
 	struct gv_sd *s;
 	struct gv_volume *v;
 	off_t origsize, offset;
 	int sdcount, err;
 
 	v = p->vol_sc;
+	KASSERT(v != NULL, ("gv_grow_complete: NULL v"));
+	sc = v->vinumconf;
+	KASSERT(sc != NULL, ("gv_grow_complete: NULL sc"));
 	err = 0;
 
 	/* If it was a read, write it. */
@@ -748,6 +753,7 @@ gv_grow_complete(struct gv_plex *p, stru
 			gv_access(v->provider, -1, -1, 0);
 			g_topology_unlock();
 			p->synced = 0;
+			gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 			/* Issue delayed requests. */
 			gv_plex_flush(p);
 		} else {
@@ -819,6 +825,7 @@ gv_init_request(struct gv_sd *s, off_t s
 void
 gv_init_complete(struct gv_plex *p, struct bio *bp)
 {
+	struct gv_softc *sc;
 	struct gv_drive *d;
 	struct g_consumer *cp;
 	struct gv_sd *s;
@@ -837,6 +844,8 @@ gv_init_complete(struct gv_plex *p, stru
 	KASSERT(d != NULL, ("gv_init_complete: NULL d"));
 	cp = d->consumer;
 	KASSERT(cp != NULL, ("gv_init_complete: NULL cp"));
+	sc = p->vinumconf;
+	KASSERT(sc != NULL, ("gv_init_complete: NULL sc"));
 
 	g_destroy_bio(bp);
 
@@ -859,6 +868,7 @@ gv_init_complete(struct gv_plex *p, stru
 		} else {
 			gv_set_sd_state(s, GV_SD_UP, GV_SETSTATE_CONFIG);
 			s->initialized = 0;
+			gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 			G_VINUM_DEBUG(1, "subdisk '%s' init: finished "
 			    "successfully", s->name);
 		}
@@ -920,12 +930,16 @@ gv_parity_request(struct gv_plex *p, int
 void
 gv_parity_complete(struct gv_plex *p, struct bio *bp)
 {
+	struct gv_softc *sc;
 	int error, flags;
 
 	error = bp->bio_error;
 	flags = bp->bio_cflags;
 	flags &= ~GV_BIO_MALLOC;
 
+	sc = p->vinumconf;
+	KASSERT(sc != NULL, ("gv_parity_complete: NULL sc"));
+
 	/* Clean up what we allocated. */
 	if (bp->bio_cflags & GV_BIO_MALLOC)
 		g_free(bp->bio_data);
@@ -960,6 +974,7 @@ gv_parity_complete(struct gv_plex *p, st
 		/* We're finished. */
 		G_VINUM_DEBUG(1, "parity operation on %s finished", p->name);
 		p->synced = 0;
+		gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 		return;
 	}
 
@@ -973,6 +988,7 @@ gv_parity_complete(struct gv_plex *p, st
 void
 gv_rebuild_complete(struct gv_plex *p, struct bio *bp)
 {
+	struct gv_softc *sc;
 	struct gv_sd *s;
 	int error, flags;
 	off_t offset;
@@ -981,6 +997,8 @@ gv_rebuild_complete(struct gv_plex *p, s
 	flags = bp->bio_cflags;
 	offset = bp->bio_offset;
 	flags &= ~GV_BIO_MALLOC;
+	sc = p->vinumconf;
+	KASSERT(sc != NULL, ("gv_rebuild_complete: NULL sc"));
 
 	/* Clean up what we allocated. */
 	if (bp->bio_cflags & GV_BIO_MALLOC)
@@ -1016,6 +1034,7 @@ gv_rebuild_complete(struct gv_plex *p, s
 		/* Try to up all subdisks. */
 		LIST_FOREACH(s, &p->subdisks, in_plex)
 			gv_update_sd_state(s);
+		gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 		gv_plex_flush(p); /* Flush out remaining rebuild BIOs. */
 		return;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901121151.n0CBpIPN065282>