PERFORCE change 124901 for review

Ulf Lilleengen lulf at FreeBSD.org
Wed Aug 8 09:30:14 PDT 2007


http://perforce.freebsd.org/chv.cgi?CH=124901

Change 124901 by lulf at lulf_carrot on 2007/08/08 16:29:20

	- Remove the sleep functionality, as it semt to be a little unstable.
	  So, instead of waiting until we get an like I did last time, I wait
	  until find_name returns a different name than what was sent for
	  creation. This means the drive will definately be created before we
	  continue, as opposed to the previous solution where one could not be
	  sure that the drive was actually created.
	- Remember to free bioq memory when we unload kernel module. This was a
	  bit ugly.

Affected files ...

.. //depot/projects/soc2007/lulf/gvinum_fixup/sbin/gvinum/gvinum.c#19 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.c#34 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.h#27 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_create.c#9 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_events.c#13 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_init.c#22 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_move.c#7 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_plex.c#24 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_rename.c#6 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_rm.c#15 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#22 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_subr.c#28 edit

Differences ...

==== //depot/projects/soc2007/lulf/gvinum_fixup/sbin/gvinum/gvinum.c#19 (text+ko) ====

@@ -402,11 +402,12 @@
 	struct gv_drive *d;
 	struct gctl_req *req;
 	const char *errstr;
-	char *drivename;
-	int drives, volumes, subdisks, plexes;
+	char *drivename, *dname;
+	int drives, i, volumes, subdisks, plexes;
 
 	plexes = subdisks = volumes = 0;
 	drives = 1;
+	dname = NULL;
 
 	/* Strip away eventual /dev/ in front. */
 	if (strncmp(device, "/dev/", 5) == 0)
@@ -432,8 +433,28 @@
 	gctl_ro_param(req, "plexes", sizeof(int), &plexes);
 	gctl_ro_param(req, "subdisks", sizeof(int), &subdisks);
 	errstr = gctl_issue(req);
-	if (errstr != NULL) 
+	if (errstr != NULL)
 		warnx("error creating drive: %s", errstr);
+	else {
+		gctl_free(req);
+		/* XXX: This is needed because we have to make sure the drives
+		 * are created before we return. */
+		/* Loop until it's in the config. */
+		for (i = 0; i < 100000; i++) {
+			dname = find_name("gvinumdrive", GV_TYPE_DRIVE,
+			    GV_MAXDRIVENAME);
+			/* If we got a different name, quit. */
+			if (dname == NULL)
+				continue;
+			if (strcmp(dname, drivename)) {
+				free(dname);
+				return (drivename);
+			}
+			free(dname);
+			dname = NULL;
+			usleep(100000); /* Sleep for 0.1s */
+		}
+	}
 	gctl_free(req);
 	return (drivename);
 }
@@ -546,7 +567,6 @@
 	}
 	gctl_free(req);
 
-	printf(buf);
 	begin = 0;
 	len = strlen(buf);
 	i = 0;

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.c#34 (text+ko) ====

@@ -75,7 +75,7 @@
 
 	g_trace(G_T_TOPOLOGY, "gv_orphan(%s)", gp->name);
 
-	gv_post_event(sc, GV_EVENT_DRIVE_LOST, d, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_DRIVE_LOST, d, NULL, 0, 0);
 }
 
 void
@@ -188,7 +188,7 @@
 	sc = gp->softc;
 
 	if (sc != NULL) {
-		gv_post_event(sc, GV_EVENT_THREAD_EXIT, NULL, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_THREAD_EXIT, NULL, NULL, 0, 0);
 		gp->softc = NULL;
 		g_wither_geom(gp, ENXIO);
 		return (EAGAIN);
@@ -240,8 +240,7 @@
 		}
 		v = gv_find_vol(sc, parent);
 		p = gv_find_plex(sc, child);
-		gv_post_event(sc, GV_EVENT_ATTACH_PLEX, p, v, *offset, *rename,
-		    0);
+		gv_post_event(sc, GV_EVENT_ATTACH_PLEX, p, v, *offset, *rename);
 		break;
 	case GV_TYPE_SD:
 		if (type_parent != GV_TYPE_PLEX) {
@@ -254,7 +253,7 @@
 			break;
 		}
 		s = gv_find_sd(sc, child);
-		gv_post_event(sc, GV_EVENT_ATTACH_SD, s, p, *offset, *rename, 0);
+		gv_post_event(sc, GV_EVENT_ATTACH_SD, s, p, *offset, *rename);
 		break;
 	default:
 		gctl_error(req, "invalid child type");
@@ -282,11 +281,11 @@
 	switch (type) {
 	case GV_TYPE_PLEX:
 		p = gv_find_plex(sc, object);
-		gv_post_event(sc, GV_EVENT_DETACH_PLEX, p, NULL, *flags, 0, 0);
+		gv_post_event(sc, GV_EVENT_DETACH_PLEX, p, NULL, *flags, 0);
 		break;
 	case GV_TYPE_SD:
 		s = gv_find_sd(sc, object);
-		gv_post_event(sc, GV_EVENT_DETACH_SD, s, NULL, *flags, 0, 0);
+		gv_post_event(sc, GV_EVENT_DETACH_SD, s, NULL, *flags, 0);
 		break;
 	default:
 		gctl_error(req, "invalid object type");
@@ -339,7 +338,7 @@
 		d = g_malloc(sizeof(*d), M_WAITOK | M_ZERO);
 		bcopy(d2, d, sizeof(*d));
 
-		gv_post_event(sc, GV_EVENT_CREATE_DRIVE, d, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_CREATE_DRIVE, d, NULL, 0, 0);
 	}
 
 	/* ... then volume definitions ... */
@@ -356,7 +355,7 @@
 		v = g_malloc(sizeof(*v), M_WAITOK | M_ZERO);
 		bcopy(v2, v, sizeof(*v));
 
-		gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0);
 	}
 
 	/* ... then plex definitions ... */
@@ -373,7 +372,7 @@
 		p = g_malloc(sizeof(*p), M_WAITOK | M_ZERO);
 		bcopy(p2, p, sizeof(*p));
 
-		gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0);
 	}
 
 	/* ... and, finally, subdisk definitions. */
@@ -390,12 +389,12 @@
 		s = g_malloc(sizeof(*s), M_WAITOK | M_ZERO);
 		bcopy(s2, s, sizeof(*s));
 
-		gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0);
 	}
 
 error:
-	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0, 0);
-	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0, 1);
+	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0);
+	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 
 	return (0);
 }
@@ -427,7 +426,7 @@
 
 	/* Save our configuration back to disk. */
 	} else if (!strcmp(verb, "saveconfig")) {
-		gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 
 	/* Return configuration in string form. */
 	} else if (!strcmp(verb, "getconfig")) {
@@ -462,7 +461,7 @@
 		gv_rename(gp, req);
 	
 	} else if (!strcmp(verb, "resetconfig")) {
-		gv_post_event(sc, GV_EVENT_RESET_CONFIG, sc, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_RESET_CONFIG, sc, NULL, 0, 0);
 
 	} else if (!strcmp(verb, "start")) {
 		gv_start_obj(gp, req);
@@ -523,9 +522,9 @@
 	/* XXX: The state of the plex might have changed when this event is
 	 * picked up ... We should perhaps check this afterwards. */
 	if (*rebuild)
-		gv_post_event(sc, GV_EVENT_PARITY_REBUILD, p, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_PARITY_REBUILD, p, NULL, 0, 0);
 	else
-		gv_post_event(sc, GV_EVENT_PARITY_CHECK, p, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_PARITY_CHECK, p, NULL, 0, 0);
 }
 
 
@@ -572,7 +571,7 @@
 	if (vhdr != NULL) {
 		if (vhdr->magic == GV_MAGIC)
 			gv_post_event(sc, GV_EVENT_DRIVE_TASTED, pp, NULL, 0,
-			    0, 0);
+			    0);
 		g_free(vhdr);
 	}
 
@@ -899,7 +898,6 @@
 				printf("VINUM: unknown event %d\n", ev->type);
 			}
 
-			wakeup(ev);
 			g_free(ev);
 
 			mtx_lock(&sc->queue_mtx);

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.h#27 (text+ko) ====

@@ -108,7 +108,7 @@
 
 void	gv_worker(void *);
 void	gv_post_event(struct gv_softc *, int, void *, void *, intmax_t,
-	    intmax_t, int);
+	    intmax_t);
 void	gv_drive_tasted(struct gv_softc *, struct g_provider *);
 void	gv_drive_lost(struct gv_softc *, struct gv_drive *);
 void	gv_setup_objects(struct gv_softc *);

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_create.c#9 (text+ko) ====

@@ -269,7 +269,7 @@
 	if (gv_sd_to_plex(s, p) != 0) {
 		printf("VINUM: couldn't give sd '%s' to plex '%s'\n",
 		    s->name, p->name);
-		if (s->drive_sc)
+		if (s->drive_sc && !(s->drive_sc->flags & GV_DRIVE_REFERENCED))
 			LIST_REMOVE(s, from_drive);
 		gv_free_sd(s);
 		g_free(s);
@@ -324,7 +324,7 @@
 	v = g_malloc(sizeof(*v), M_WAITOK | M_ZERO);
 	strlcpy(v->name, vol, GV_MAXVOLNAME);
 	v->state = GV_VOL_UP;
-	gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0);
 
 	/* Then we create the plex. */
 	p = g_malloc(sizeof(*p), M_WAITOK | M_ZERO);
@@ -332,7 +332,7 @@
 	strlcpy(p->volume, v->name, GV_MAXVOLNAME);
 	p->org = GV_PLEX_CONCAT;
 	p->stripesize = 0;
-	gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0);
 
 	/* Drives are first (right now) priority */
 	for (dcount = 0; dcount < *drives; dcount++) {
@@ -350,10 +350,10 @@
 		s->plex_offset = -1;
 		s->drive_offset = -1;
 		s->size = -1;
-		gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0);
 	}
-	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0, 0);
-	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0, 1);
+	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0);
+	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 }
 
 /*
@@ -402,7 +402,7 @@
 	v = g_malloc(sizeof(*v), M_WAITOK | M_ZERO);
 	strlcpy(v->name, vol, GV_MAXVOLNAME);
 	v->state = GV_VOL_UP;
-	gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0);
 
 	/* Then we create the plexes. */
 	for (pcount = 0; pcount < 2; pcount++) {
@@ -417,7 +417,7 @@
 			p->org = GV_PLEX_CONCAT;
 			p->stripesize = -1;
 		}
-		gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0);
 
 		/* We just gives each even drive to plex one, and each odd to
 		 * plex two. */
@@ -440,12 +440,12 @@
 			s->plex_offset = -1;
 			s->drive_offset = -1;
 			s->size = -1;
-			gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0, 0);
+			gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0);
 			scount++;
 		}
 	}
-	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0, 0);
-	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0, 1);
+	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0);
+	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 }
 
 void
@@ -492,7 +492,7 @@
 	v = g_malloc(sizeof(*v), M_WAITOK | M_ZERO);
 	strlcpy(v->name, vol, GV_MAXVOLNAME);
 	v->state = GV_VOL_UP;
-	gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0);
 
 	/* Then we create the plex. */
 	p = g_malloc(sizeof(*p), M_WAITOK | M_ZERO);
@@ -500,7 +500,7 @@
 	strlcpy(p->volume, v->name, GV_MAXVOLNAME);
 	p->org = GV_PLEX_RAID5;
 	p->stripesize = *stripesize;
-	gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0);
 
 	/* Create subdisks on drives. */
 	for (dcount = 0; dcount < *drives; dcount++) {
@@ -518,10 +518,10 @@
 		s->plex_offset = -1;
 		s->drive_offset = -1;
 		s->size = -1;
-		gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0);
 	}
-	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0, 0);
-	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0, 1);
+	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0);
+	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 }
 
 /*
@@ -564,7 +564,7 @@
 	v = g_malloc(sizeof(*v), M_WAITOK | M_ZERO);
 	strlcpy(v->name, vol, GV_MAXVOLNAME);
 	v->state = GV_VOL_UP;
-	gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_CREATE_VOLUME, v, NULL, 0, 0);
 
 	/* Then we create the plex. */
 	p = g_malloc(sizeof(*p), M_WAITOK | M_ZERO);
@@ -572,7 +572,7 @@
 	strlcpy(p->volume, v->name, GV_MAXVOLNAME);
 	p->org = GV_PLEX_STRIPED;
 	p->stripesize = 262144;
-	gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_CREATE_PLEX, p, NULL, 0, 0);
 
 	/* Create subdisks on drives. */
 	for (dcount = 0; dcount < *drives; dcount++) {
@@ -590,8 +590,8 @@
 		s->plex_offset = -1;
 		s->drive_offset = -1;
 		s->size = -1;
-		gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0, 0);
+		gv_post_event(sc, GV_EVENT_CREATE_SD, s, NULL, 0, 0);
 	}
-	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0, 0);
-	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0, 1);
+	gv_post_event(sc, GV_EVENT_SETUP_OBJECTS, sc, NULL, 0, 0);
+	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 }

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_events.c#13 (text+ko) ====

@@ -41,7 +41,7 @@
 
 void
 gv_post_event(struct gv_softc *sc, int event, void *arg1, void *arg2,
-    intmax_t arg3, intmax_t arg4, int wait)
+    intmax_t arg3, intmax_t arg4)
 {
 	struct gv_event *ev;
 
@@ -55,8 +55,6 @@
 	mtx_lock(&sc->queue_mtx);
 	TAILQ_INSERT_TAIL(&sc->equeue, ev, events);
 	wakeup(sc);
-	if (wait)
-		msleep(ev, &sc->queue_mtx, 0, "gv_post_event", hz / 4);
 	mtx_unlock(&sc->queue_mtx);
 }
 
@@ -173,7 +171,7 @@
 		if (cp->nstart != cp->nend) {
 			printf("VINUM: dead drive '%s' has still active "
 			    "requests, can't detach consumer\n", d->name);
-			gv_post_event(sc, GV_EVENT_DRIVE_LOST, d, NULL, 0, 0, 0);
+			gv_post_event(sc, GV_EVENT_DRIVE_LOST, d, NULL, 0, 0);
 			return;
 		}
 		g_topology_lock();

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_init.c#22 (text+ko) ====

@@ -72,14 +72,14 @@
 			v = gv_find_vol(sc, argv);
 			if (v != NULL)
 				gv_post_event(sc, GV_EVENT_START_VOLUME, v,
-				    NULL, *initsize, 0, 0);
+				    NULL, *initsize, 0);
 			break;
 
 		case GV_TYPE_PLEX:
 			p = gv_find_plex(sc, argv);
 			if (p != NULL)
 				gv_post_event(sc, GV_EVENT_START_PLEX, p, NULL,
-				    *initsize, 0, 0);
+				    *initsize, 0);
 			break;
 
 		case GV_TYPE_SD:

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_move.c#7 (text+ko) ====

@@ -85,7 +85,7 @@
 			gctl_error(req, "unknown subdisk '%s'", object);
 			return;
 		}
-		gv_post_event(sc, GV_EVENT_MOVE_SD, s, d, *flags, 0, 0);
+		gv_post_event(sc, GV_EVENT_MOVE_SD, s, d, *flags, 0);
 	}
 }
 

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_plex.c#24 (text+ko) ====


==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_rename.c#6 (text+ko) ====

@@ -77,7 +77,7 @@
 		}
 		name = g_malloc(GV_MAXVOLNAME, M_WAITOK | M_ZERO);
 		strlcpy(name, newname, GV_MAXVOLNAME);
-		gv_post_event(sc, GV_EVENT_RENAME_VOL, v, name, *flags, 0, 0);
+		gv_post_event(sc, GV_EVENT_RENAME_VOL, v, name, *flags, 0);
 		break;
 	case GV_TYPE_PLEX:
 		p = gv_find_plex(sc, object);
@@ -87,7 +87,7 @@
 		}
 		name = g_malloc(GV_MAXPLEXNAME, M_WAITOK | M_ZERO);
 		strlcpy(name, newname, GV_MAXPLEXNAME);
-		gv_post_event(sc, GV_EVENT_RENAME_PLEX, p, name, *flags, 0, 0);
+		gv_post_event(sc, GV_EVENT_RENAME_PLEX, p, name, *flags, 0);
 		break;
 	case GV_TYPE_SD:
 		s = gv_find_sd(sc, object);
@@ -97,7 +97,7 @@
 		}
 		name = g_malloc(GV_MAXSDNAME, M_WAITOK | M_ZERO);
 		strlcpy(name, newname, GV_MAXSDNAME);
-		gv_post_event(sc, GV_EVENT_RENAME_SD, s, name, *flags, 0, 0);
+		gv_post_event(sc, GV_EVENT_RENAME_SD, s, name, *flags, 0);
 		break;
 	case GV_TYPE_DRIVE:
 		d = gv_find_drive(sc, object);
@@ -107,7 +107,7 @@
 		}
 		name = g_malloc(GV_MAXDRIVENAME, M_WAITOK | M_ZERO);
 		strlcpy(name, newname, GV_MAXDRIVENAME);
-		gv_post_event(sc, GV_EVENT_RENAME_DRIVE, d, name, *flags, 0, 0);
+		gv_post_event(sc, GV_EVENT_RENAME_DRIVE, d, name, *flags, 0);
 		break;
 	default:
 		gctl_error(req, "unknown object '%s'", object);

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_rm.c#15 (text+ko) ====

@@ -81,7 +81,7 @@
 				return;
 			}
 
-			gv_post_event(sc, GV_EVENT_RM_VOLUME, v, NULL, 0, 0, 0);
+			gv_post_event(sc, GV_EVENT_RM_VOLUME, v, NULL, 0, 0);
 			break;
 
 		case GV_TYPE_PLEX:
@@ -106,7 +106,7 @@
 				return;
 			}
 
-			gv_post_event(sc, GV_EVENT_RM_PLEX, p, NULL, 0, 0, 0);
+			gv_post_event(sc, GV_EVENT_RM_PLEX, p, NULL, 0, 0);
 			break;
 
 		case GV_TYPE_SD:
@@ -119,7 +119,7 @@
 				return;
 			}
 
-			gv_post_event(sc, GV_EVENT_RM_SD, s, NULL, 0, 0, 0);
+			gv_post_event(sc, GV_EVENT_RM_SD, s, NULL, 0, 0);
 			break;
 
 		case GV_TYPE_DRIVE:
@@ -138,7 +138,7 @@
 				return;
 			}*/
 
-			gv_post_event(sc, GV_EVENT_RM_DRIVE, d, NULL, *flags, 0,
+			gv_post_event(sc, GV_EVENT_RM_DRIVE, d, NULL, *flags,
 			    0);
 			break;
 
@@ -148,7 +148,7 @@
 		}
 	}
 
-	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 }
 
 /* Resets configuration */
@@ -176,7 +176,7 @@
 	LIST_FOREACH_SAFE(v, &sc->volumes, volume, v2)
 		gv_rm_vol(sc, v);
 
-	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0, 0);
+	gv_post_event(sc, GV_EVENT_SAVE_CONFIG, sc, NULL, 0, 0);
 
 	return (0);
 }

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#22 (text+ko) ====

@@ -78,7 +78,7 @@
 		}
 		v = gv_find_vol(sc, obj);
 		gv_post_event(sc, GV_EVENT_SET_VOL_STATE, v, NULL,
-		    gv_volstatei(state), f, 0);
+		    gv_volstatei(state), f);
 		break;
 
 	case GV_TYPE_PLEX:
@@ -88,7 +88,7 @@
 		}
 		p = gv_find_plex(sc, obj);
 		gv_post_event(sc, GV_EVENT_SET_PLEX_STATE, p, NULL,
-		    gv_plexstatei(state), f, 0);
+		    gv_plexstatei(state), f);
 		break;
 
 	case GV_TYPE_SD:
@@ -98,7 +98,7 @@
 		}
 		s = gv_find_sd(sc, obj);
 		gv_post_event(sc, GV_EVENT_SET_SD_STATE, s, NULL,
-		    gv_sdstatei(state), f, 0);
+		    gv_sdstatei(state), f);
 		break;
 
 	case GV_TYPE_DRIVE:
@@ -108,7 +108,7 @@
 		}
 		d = gv_find_drive(sc, obj);
 		gv_post_event(sc, GV_EVENT_SET_DRIVE_STATE, d, NULL,
-		    gv_drivestatei(state), f, 0);
+		    gv_drivestatei(state), f);
 		break;
 
 	default:

==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_subr.c#28 (text+ko) ====

@@ -1059,11 +1059,13 @@
 	mtx_lock(&sc->config_mtx);
 	LIST_FOREACH_SAFE(v, &sc->volumes, volume, v2) {
 		LIST_REMOVE(v, volume);
+		g_free(v->wqueue);
 		g_free(v);
 	}
 	LIST_FOREACH_SAFE(p, &sc->plexes, plex, p2) {
 		LIST_REMOVE(p, plex);
 		g_free(p->bqueue);
+		g_free(p->rqueue);
 		g_free(p->wqueue);
 		g_free(p);
 	}


More information about the p4-projects mailing list