kern/160562: commit references a PR

dfilter service dfilter at FreeBSD.ORG
Tue Jan 29 18:00:02 UTC 2013


The following reply was made to PR kern/160562; it has been noted by GNATS.

From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: kern/160562: commit references a PR
Date: Tue, 29 Jan 2013 17:54:39 +0000 (UTC)

 Author: mav
 Date: Tue Jan 29 17:54:26 2013
 New Revision: 246082
 URL: http://svnweb.freebsd.org/changeset/base/246082
 
 Log:
   MFC r245456:
   Allow to insert new component to geom_raid3 without specifying number.
   
   PR:		kern/160562
 
 Modified:
   stable/8/sbin/geom/class/raid3/geom_raid3.c
   stable/8/sbin/geom/class/raid3/graid3.8
   stable/8/sys/geom/raid3/g_raid3_ctl.c
 Directory Properties:
   stable/8/sbin/geom/class/raid3/   (props changed)
   stable/8/sys/   (props changed)
   stable/8/sys/geom/   (props changed)
 
 Modified: stable/8/sbin/geom/class/raid3/geom_raid3.c
 ==============================================================================
 --- stable/8/sbin/geom/class/raid3/geom_raid3.c	Tue Jan 29 17:51:12 2013	(r246081)
 +++ stable/8/sbin/geom/class/raid3/geom_raid3.c	Tue Jan 29 17:54:26 2013	(r246082)
 @@ -76,7 +76,7 @@ struct g_command class_commands[] = {
  	{ "insert", G_FLAG_VERBOSE, NULL,
  	    {
  		{ 'h', "hardcode", NULL, G_TYPE_BOOL },
 -		{ 'n', "number", NULL, G_TYPE_NUMBER },
 +		{ 'n', "number", G_VAL_OPTIONAL, G_TYPE_NUMBER },
  		G_OPT_SENTINEL
  	    },
  	    NULL, "[-hv] <-n number> name prov"
 
 Modified: stable/8/sbin/geom/class/raid3/graid3.8
 ==============================================================================
 --- stable/8/sbin/geom/class/raid3/graid3.8	Tue Jan 29 17:51:12 2013	(r246081)
 +++ stable/8/sbin/geom/class/raid3/graid3.8	Tue Jan 29 17:54:26 2013	(r246082)
 @@ -24,7 +24,7 @@
  .\"
  .\" $FreeBSD$
  .\"
 -.Dd November 1, 2006
 +.Dd January 15, 2012
  .Dt GRAID3 8
  .Os
  .Sh NAME
 @@ -52,7 +52,7 @@
  .Nm
  .Cm insert
  .Op Fl hv
 -.Fl n Ar number
 +.Op Fl n Ar number
  .Ar name
  .Ar prov
  .Nm
 @@ -164,6 +164,8 @@ Add the given component to the existing 
  removed previously with the
  .Cm remove
  command or if one component is missing and will not be connected again.
 +If no number is given, new component will be added instead of first missed
 +component.
  .Pp
  Additional options include:
  .Bl -tag -width ".Fl h"
 
 Modified: stable/8/sys/geom/raid3/g_raid3_ctl.c
 ==============================================================================
 --- stable/8/sys/geom/raid3/g_raid3_ctl.c	Tue Jan 29 17:51:12 2013	(r246081)
 +++ stable/8/sys/geom/raid3/g_raid3_ctl.c	Tue Jan 29 17:54:26 2013	(r246082)
 @@ -404,7 +404,7 @@ g_raid3_ctl_insert(struct gctl_req *req,
  	u_char *sector;
  	off_t compsize;
  	intmax_t *no;
 -	int *hardcode, *nargs, error;
 +	int *hardcode, *nargs, error, autono;
  
  	nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs));
  	if (nargs == NULL) {
 @@ -425,11 +425,10 @@ g_raid3_ctl_insert(struct gctl_req *req,
  		gctl_error(req, "No 'arg%u' argument.", 1);
  		return;
  	}
 -	no = gctl_get_paraml(req, "number", sizeof(*no));
 -	if (no == NULL) {
 -		gctl_error(req, "No '%s' argument.", "no");
 -		return;
 -	}
 +	if (gctl_get_param(req, "number", NULL) != NULL)
 +		no = gctl_get_paraml(req, "number", sizeof(*no));
 +	else
 +		no = NULL;
  	if (strncmp(name, "/dev/", 5) == 0)
  		name += 5;
  	g_topology_lock();
 @@ -465,16 +464,30 @@ g_raid3_ctl_insert(struct gctl_req *req,
  		gctl_error(req, "No such device: %s.", name);
  		goto end;
  	}
 -	if (*no >= sc->sc_ndisks) {
 -		sx_xunlock(&sc->sc_lock);
 -		gctl_error(req, "Invalid component number.");
 -		goto end;
 -	}
 -	disk = &sc->sc_disks[*no];
 -	if (disk->d_state != G_RAID3_DISK_STATE_NODISK) {
 -		sx_xunlock(&sc->sc_lock);
 -		gctl_error(req, "Component %jd is already connected.", *no);
 -		goto end;
 +	if (no != NULL) {
 +		if (*no < 0 || *no >= sc->sc_ndisks) {
 +			sx_xunlock(&sc->sc_lock);
 +			gctl_error(req, "Invalid component number.");
 +			goto end;
 +		}
 +		disk = &sc->sc_disks[*no];
 +		if (disk->d_state != G_RAID3_DISK_STATE_NODISK) {
 +			sx_xunlock(&sc->sc_lock);
 +			gctl_error(req, "Component %jd is already connected.",
 +			    *no);
 +			goto end;
 +		}
 +	} else {
 +		disk = NULL;
 +		for (autono = 0; autono < sc->sc_ndisks && disk == NULL; autono++)
 +			if (sc->sc_disks[autono].d_state ==
 +			    G_RAID3_DISK_STATE_NODISK)
 +				disk = &sc->sc_disks[autono];
 +		if (disk == NULL) {
 +			sx_xunlock(&sc->sc_lock);
 +			gctl_error(req, "No disconnected components.");
 +			goto end;
 +		}
  	}
  	if (((sc->sc_sectorsize / (sc->sc_ndisks - 1)) % pp->sectorsize) != 0) {
  		sx_xunlock(&sc->sc_lock);
 _______________________________________________
 svn-src-all at freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
 


More information about the freebsd-geom mailing list