svn commit: r190881 - in head: sbin/gvinum sys/geom/vinum

Ulf Lilleengen lulf at FreeBSD.org
Fri Apr 10 08:50:15 UTC 2009


Author: lulf
Date: Fri Apr 10 08:50:14 2009
New Revision: 190881
URL: http://svn.freebsd.org/changeset/base/190881

Log:
  - Move out allocation part of different gvinum objects into its own routine and
    make use of it in the gvinum userland code.

Modified:
  head/sbin/gvinum/gvinum.c
  head/sys/geom/vinum/geom_vinum_share.c
  head/sys/geom/vinum/geom_vinum_share.h

Modified: head/sbin/gvinum/gvinum.c
==============================================================================
--- head/sbin/gvinum/gvinum.c	Fri Apr 10 06:16:14 2009	(r190880)
+++ head/sbin/gvinum/gvinum.c	Fri Apr 10 08:50:14 2009	(r190881)
@@ -433,10 +433,9 @@ create_drive(char *device)
 	req = gctl_get_handle();
 	gctl_ro_param(req, "class", -1, "VINUM");
 	gctl_ro_param(req, "verb", -1, "create");
-	d = malloc(sizeof(struct gv_drive));
+	d = gv_alloc_drive();
 	if (d == NULL)
 		err(1, "unable to allocate for gv_drive object");
-	memset(d, 0, sizeof(struct gv_drive));
 
 	strlcpy(d->name, drivename, sizeof(d->name));
 	strlcpy(d->device, device, sizeof(d->device));

Modified: head/sys/geom/vinum/geom_vinum_share.c
==============================================================================
--- head/sys/geom/vinum/geom_vinum_share.c	Fri Apr 10 06:16:14 2009	(r190880)
+++ head/sys/geom/vinum/geom_vinum_share.c	Fri Apr 10 08:50:14 2009	(r190881)
@@ -367,16 +367,29 @@ gv_plexorg_short(int org)
 	}
 }
 
-/* Get a new drive object. */
-struct gv_drive *
-gv_new_drive(int max, char *token[])
+struct gv_sd *
+gv_alloc_sd(void)
 {
-	struct gv_drive *d;
-	int j, errors;
-	char *ptr;
+	struct gv_sd *s;
 
-	if (token[1] == NULL || *token[1] == '\0')
+#ifdef _KERNEL
+	s = g_malloc(sizeof(struct gv_sd), M_NOWAIT);
+#else
+	s = malloc(sizeof(struct gv_sd));
+#endif
+	if (s == NULL)
 		return (NULL);
+	bzero(s, sizeof(struct gv_sd));
+	s->plex_offset = -1;
+	s->size = -1;
+	s->drive_offset = -1;
+	return (s);
+}
+
+struct gv_drive *
+gv_alloc_drive(void)
+{
+	struct gv_drive *d;
 
 #ifdef _KERNEL
 	d = g_malloc(sizeof(struct gv_drive), M_NOWAIT);
@@ -386,7 +399,54 @@ gv_new_drive(int max, char *token[])
 	if (d == NULL)
 		return (NULL);
 	bzero(d, sizeof(struct gv_drive));
+	return (d);
+}
+
+struct gv_volume *
+gv_alloc_volume(void)
+{
+	struct gv_volume *v;
+
+#ifdef _KERNEL
+	v = g_malloc(sizeof(struct gv_volume), M_NOWAIT);
+#else
+	v = malloc(sizeof(struct gv_volume));
+#endif
+	if (v == NULL)
+		return (NULL);
+	bzero(v, sizeof(struct gv_volume));
+	return (v);
+}
+
+struct gv_plex *
+gv_alloc_plex(void)
+{
+	struct gv_plex *p;
 
+#ifdef _KERNEL
+	p = g_malloc(sizeof(struct gv_plex), M_NOWAIT);
+#else
+	p = malloc(sizeof(struct gv_plex));
+#endif
+	if (p == NULL)
+		return (NULL);
+	bzero(p, sizeof(struct gv_plex));
+	return (p);
+}
+
+/* Get a new drive object. */
+struct gv_drive *
+gv_new_drive(int max, char *token[])
+{
+	struct gv_drive *d;
+	int j, errors;
+	char *ptr;
+
+	if (token[1] == NULL || *token[1] == '\0')
+		return (NULL);
+	d = gv_alloc_drive();
+	if (d == NULL)
+		return (NULL);
 	errors = 0;
 	for (j = 1; j < max; j++) {
 		if (!strcmp(token[j], "state")) {
@@ -434,14 +494,9 @@ gv_new_volume(int max, char *token[])
 	if (token[1] == NULL || *token[1] == '\0')
 		return (NULL);
 
-#ifdef _KERNEL
-	v = g_malloc(sizeof(struct gv_volume), M_NOWAIT);
-#else
-	v = malloc(sizeof(struct gv_volume));
-#endif
+	v = gv_alloc_volume();
 	if (v == NULL)
 		return (NULL);
-	bzero(v, sizeof(struct gv_volume));
 
 	errors = 0;
 	for (j = 1; j < max; j++) {
@@ -479,14 +534,9 @@ gv_new_plex(int max, char *token[])
 	if (token[1] == NULL || *token[1] == '\0')
 		return (NULL);
 
-#ifdef _KERNEL
-	p = g_malloc(sizeof(struct gv_plex), M_NOWAIT);
-#else
-	p = malloc(sizeof(struct gv_plex));
-#endif
+	p = gv_alloc_plex();
 	if (p == NULL)
 		return (NULL);
-	bzero(p, sizeof(struct gv_plex));
 
 	errors = 0;
 	for (j = 1; j < max; j++) {
@@ -546,6 +596,8 @@ gv_new_plex(int max, char *token[])
 	return (p);
 }
 
+
+
 /* Get a new subdisk object. */
 struct gv_sd *
 gv_new_sd(int max, char *token[])
@@ -556,18 +608,10 @@ gv_new_sd(int max, char *token[])
 	if (token[1] == NULL || *token[1] == '\0')
 		return (NULL);
 
-#ifdef _KERNEL
-	s = g_malloc(sizeof(struct gv_sd), M_NOWAIT);
-#else
-	s = malloc(sizeof(struct gv_sd));
-#endif
+	s = gv_alloc_sd();
 	if (s == NULL)
 		return (NULL);
-	bzero(s, sizeof(struct gv_sd));
 
-	s->plex_offset = -1;
-	s->size = -1;
-	s->drive_offset = -1;
 	errors = 0;
 	for (j = 1; j < max; j++) {
 		if (!strcmp(token[j], "name")) {

Modified: head/sys/geom/vinum/geom_vinum_share.h
==============================================================================
--- head/sys/geom/vinum/geom_vinum_share.h	Fri Apr 10 06:16:14 2009	(r190880)
+++ head/sys/geom/vinum/geom_vinum_share.h	Fri Apr 10 08:50:14 2009	(r190881)
@@ -41,6 +41,10 @@ enum {
 off_t	gv_sizespec(char *);
 int	gv_tokenize(char *, char **, int);
 
+struct gv_sd	 *gv_alloc_sd(void);
+struct gv_volume *gv_alloc_volume(void);
+struct gv_plex	 *gv_alloc_plex(void);
+struct gv_drive	 *gv_alloc_drive(void);
 struct gv_drive	 *gv_new_drive(int, char **);
 struct gv_plex	 *gv_new_plex(int, char **);
 struct gv_sd	 *gv_new_sd(int, char **);


More information about the svn-src-head mailing list