Date: Thu, 5 Jul 2007 14:33:37 GMT From: Ulf Lilleengen <lulf@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 122956 for review Message-ID: <200707051433.l65EXb2S079806@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=122956 Change 122956 by lulf@lulf_carrot on 2007/07/05 14:32:43 - Implement userland part of the raid5 command. Affected files ... .. //depot/projects/soc2007/lulf/gvinum_fixup/sbin/gvinum/gvinum.c#12 edit Differences ... ==== //depot/projects/soc2007/lulf/gvinum_fixup/sbin/gvinum/gvinum.c#12 (text+ko) ==== @@ -65,6 +65,7 @@ void gvinum_mirror(int, char **); void gvinum_parityop(int, char **, int); void gvinum_printconfig(int, char **); +void gvinum_raid5(int, char **); void gvinum_rename(int, char **); void gvinum_resetconfig(void); void gvinum_rm(int, char **); @@ -427,8 +428,8 @@ } /* - * General routine for creating a volume. Mainly for use by concat, mirror and - * stripe commands. + * General routine for creating a volume. Mainly for use by concat, mirror, + * raid5 and stripe commands. */ void create_volume(int argc, char **argv, char *verb) @@ -437,10 +438,13 @@ const char *errstr; char buf[BUFSIZ], *drivename, *volname; int drives, flags, i; + off_t stripesize; flags = 0; drives = 0; volname = NULL; + stripesize = 262144; + /* XXX: Should we check for argument length? */ req = gctl_get_handle(); @@ -455,6 +459,8 @@ flags |= GV_FLAG_V; } else if (!strcmp(argv[i], "-s")) { flags |= GV_FLAG_S; + if (!strcmp(verb, "raid5")) + stripesize = gv_sizespec(argv[++i]); } else { /* Assume it's a drive. */ snprintf(buf, sizeof(buf), "drive%d", drives++); @@ -468,6 +474,8 @@ } } + gctl_ro_param(req, "stripesize", sizeof(off_t), &stripesize); + /* Find a free volume name. */ if (volname == NULL) volname = find_name("gvinumvolume", GV_TYPE_VOL, GV_MAXVOLNAME); @@ -646,6 +654,8 @@ "quit Exit the vinum program when running in interactive mode." " Nor-\n" " mally this would be done by entering the EOF character.\n" + "raid5 [-fv] [-s stripesize] [-n name] drives\n" + " Create a RAID-5 volume from the specified drives.\n" "rename [-r] [drive | subdisk | plex | volume] newname\n" " Change the name of the specified object.\n" "rebuildparity plex [-f]\n" @@ -917,7 +927,20 @@ gctl_free(req); } +/* Create a RAID-5 volume. */ void +gvinum_raid5(int argc, char **argv) +{ + + if (argc < 2) { + warnx("usage:\traid5 [-fv] [-s stripesize] [-n name] drives\n"); + return; + } + create_volume(argc, argv, "raid5"); +} + + +void gvinum_rename(int argc, char **argv) { struct gctl_req *req; @@ -1199,6 +1222,8 @@ gvinum_move(argc, argv); else if (!strcmp(argv[0], "printconfig")) gvinum_printconfig(argc, argv); + else if (!strcmp(argv[0], "raid5")) + gvinum_raid5(argc, argv); else if (!strcmp(argv[0], "rename")) gvinum_rename(argc, argv); else if (!strcmp(argv[0], "resetconfig"))
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707051433.l65EXb2S079806>