summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgrog <grog@FreeBSD.org>1999-08-14 06:30:56 +0000
committergrog <grog@FreeBSD.org>1999-08-14 06:30:56 +0000
commita9d129e2f3f45fbee8866364fac7397b6079f49b (patch)
treef29c6a338aaa0a7014c695cba9f0d96e7fe1f1a6
parent942707108faa7d7c198b7e6d6a56cb89694ac8e7 (diff)
downloadFreeBSD-src-a9d129e2f3f45fbee8866364fac7397b6079f49b.zip
FreeBSD-src-a9d129e2f3f45fbee8866364fac7397b6079f49b.tar.gz
Clean up comments.
Don't return "can't do it" when the user requests a state change to the current state. This previously caused silly messages like "Can't start <foo>: invalid argument", when in fact <foo> was already started. set_plex_state: don't set state for non-existent plexes. update_plex_status: as long as we have initializing subdisks, we're initializing.
-rw-r--r--sys/dev/vinum/vinumstate.c99
1 files changed, 44 insertions, 55 deletions
diff --git a/sys/dev/vinum/vinumstate.c b/sys/dev/vinum/vinumstate.c
index a38f3f8..86587a1 100644
--- a/sys/dev/vinum/vinumstate.c
+++ b/sys/dev/vinum/vinumstate.c
@@ -55,35 +55,34 @@ set_drive_state(int driveno, enum drivestate newstate, enum setstateflags flags)
if (drive->state == drive_unallocated) /* no drive to do anything with, */
return 0;
- if (newstate != oldstate) { /* don't change it if it's not different */
- if ((newstate == drive_down) /* the drive's going down */
- &&(!(flags & setstate_force))
- && (drive->opencount != 0)) /* we can't do it */
- return 0; /* don't do it */
- drive->state = newstate; /* set the state */
- if (drive->label.name[0] != '\0') /* we have a name, */
- log(LOG_INFO,
- "vinum: drive %s is %s\n",
- drive->label.name,
- drive_state(drive->state));
- if ((drive->state == drive_up)
- && (drive->vp == NULL)) /* should be open, but we're not */
- init_drive(drive, 1); /* which changes the state again */
- if (newstate < drive_up) /* drive going down, */
- queue_daemon_request(daemonrq_closedrive, /* get the daemon to close it */
- (union daemoninfo) drive);
- if (newstate != oldstate) { /* state has changed */
- for (sdno = 0; sdno < vinum_conf.subdisks_allocated; sdno++) { /* find this drive's subdisks */
- if ((SD[sdno].state >= sd_referenced)
- && (SD[sdno].driveno == driveno)) /* belongs to this drive */
- update_sd_state(sdno); /* update the state */
- }
+ if (newstate == oldstate) /* don't change it if it's not different */
+ return 1; /* all OK */
+ if ((newstate == drive_down) /* the drive's going down */
+ &&(!(flags & setstate_force))
+ && (drive->opencount != 0)) /* we can't do it */
+ return 0; /* don't do it */
+ drive->state = newstate; /* set the state */
+ if (drive->label.name[0] != '\0') /* we have a name, */
+ log(LOG_INFO,
+ "vinum: drive %s is %s\n",
+ drive->label.name,
+ drive_state(drive->state));
+ if ((drive->state == drive_up)
+ && (drive->vp == NULL)) /* should be open, but we're not */
+ init_drive(drive, 1); /* which changes the state again */
+ if (newstate < drive_up) /* drive going down, */
+ queue_daemon_request(daemonrq_closedrive, /* get the daemon to close it */
+ (union daemoninfo) drive);
+ if (newstate != oldstate) { /* state has changed */
+ for (sdno = 0; sdno < vinum_conf.subdisks_allocated; sdno++) { /* find this drive's subdisks */
+ if ((SD[sdno].state >= sd_referenced)
+ && (SD[sdno].driveno == driveno)) /* belongs to this drive */
+ update_sd_state(sdno); /* update the state */
}
- if ((flags & setstate_configuring) == 0) /* configuring? */
- save_config(); /* no: save the updated configuration now */
- return 1;
}
- return 0;
+ if ((flags & setstate_configuring) == 0) /* configuring? */
+ save_config(); /* no: save the updated configuration now */
+ return 1;
}
/*
@@ -107,9 +106,10 @@ set_sd_state(int sdno, enum sdstate newstate, enum setstateflags flags)
int oldstate = sd->state;
int status = 1; /* status to return */
- if ((newstate == oldstate)
- || (sd->state == sd_unallocated)) /* no subdisk to do anything with, */
- return 0;
+ if (newstate == oldstate) /* already there, */
+ return 1;
+ else if (sd->state == sd_unallocated) /* no subdisk to do anything with, */
+ return 0; /* can't do it */
if (sd->driveoffset < 0) { /* not allocated space */
sd->state = sd_down;
@@ -118,7 +118,7 @@ set_sd_state(int sdno, enum sdstate newstate, enum setstateflags flags)
sdstatemap(&PLEX[sd->plexno]); /* count up subdisks */
return -1;
}
- } else { /* space allocated */
+ } else { /* space allocated */
switch (newstate) {
case sd_down: /* take it down? */
/*
@@ -174,6 +174,7 @@ set_sd_state(int sdno, enum sdstate newstate, enum setstateflags flags)
/* otherwise it's like being empty */
/* FALLTHROUGH */
+ case sd_initializing:
case sd_empty:
/*
* If we're associated with a plex which is down, or which is
@@ -233,19 +234,6 @@ set_sd_state(int sdno, enum sdstate newstate, enum setstateflags flags)
status = EAGAIN; /* need to repeat */
break;
- /*
- * XXX This is silly. We need to be able to
- * bring the subdisk up when it's finished
- * initializing, but not from the user. We
- * use the same ioctl in each case, but Vinum(8)
- * doesn't supply the -f flag, so we use that
- * to decide whether to do it or not
- */
- case sd_initializing:
- if (flags & setstate_force)
- break; /* do it if we have to */
- return 0; /* no */
-
case sd_reviving:
if (flags & setstate_force) /* insist, */
break;
@@ -302,19 +290,19 @@ set_plex_state(int plexno, enum plexstate state, enum setstateflags flags)
plex = &PLEX[plexno]; /* point to our plex */
oldstate = plex->state;
+ /* If the plex isn't allocated, we can't do it. */
+ if (plex->state == plex_unallocated)
+ return 0;
+
/*
- * If the plex isn't allocated,
- * or it's already in the the state we want,
+ * If it's already in the the state we want,
* and it's not up, just return. If it's up,
* we still need to do some housekeeping.
*/
- if ((plex->state == plex_unallocated)
- || ((state == oldstate)
- && (state != plex_up)))
- return 0;
-
+ if ((state == oldstate)
+ && (state != plex_up))
+ return 1;
vps = vpstate(plex); /* how do we compare with the other plexes? */
-
switch (state) {
/*
* We can't bring the plex up, even by force,
@@ -380,9 +368,10 @@ set_volume_state(int volno, enum volumestate state, enum setstateflags flags)
{
struct volume *vol = &VOL[volno]; /* point to our volume */
- if ((vol->state == state) /* we're there already */
- ||(vol->state == volume_unallocated)) /* or no volume to do anything with, */
+ if (vol->state == volume_unallocated) /* no volume to do anything with, */
return 0;
+ if (vol->state == state) /* we're there already */
+ return 1;
if (state == volume_up) /* want to come up */
update_volume_state(volno);
@@ -483,7 +472,7 @@ update_plex_state(int plexno)
statemap = sdstatemap(plex); /* get a map of the subdisk states */
vps = vpstate(plex); /* how do we compare with the other plexes? */
- if (statemap & sd_initializing) /* something initializing? */
+ if (statemap & sd_initstate) /* something initializing? */
plex->state = plex_initializing; /* yup, that makes the plex the same */
if ((statemap == sd_emptystate) /* all subdisks empty */
&&((vps & volplex_otherup) == 0) /* and no other plex is up */ &&((plex->organization == plex_concat) /* and we're not RAID-5 */
OpenPOWER on IntegriCloud