svn commit: r218254 - projects/graid/head/sys/geom/raid
Warner Losh
imp at FreeBSD.org
Fri Feb 4 07:15:39 UTC 2011
Author: imp
Date: Fri Feb 4 07:15:39 2011
New Revision: 218254
URL: http://svn.freebsd.org/changeset/base/218254
Log:
Minor refactoring
Modified:
projects/graid/head/sys/geom/raid/tr_raid1.c
Modified: projects/graid/head/sys/geom/raid/tr_raid1.c
==============================================================================
--- projects/graid/head/sys/geom/raid/tr_raid1.c Fri Feb 4 07:02:35 2011 (r218253)
+++ projects/graid/head/sys/geom/raid/tr_raid1.c Fri Feb 4 07:15:39 2011 (r218254)
@@ -225,17 +225,13 @@ g_raid_tr_raid1_rebuild_some(struct g_ra
}
static void
-g_raid_tr_raid1_rebuild_finish(struct g_raid_tr_object *tr,
+g_raid_tr_raid1_rebuild_done(struct g_raid_tr_raid1_object *trs,
struct g_raid_volume *vol)
{
- struct g_raid_tr_raid1_object *trs;
struct g_raid_subdisk *sd;
- trs = (struct g_raid_tr_raid1_object *)tr;
sd = trs->trso_failed_sd;
sd->sd_rebuild_pos = 0;
- g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE);
- g_raid_tr_update_state_raid1(vol);
g_raid_write_metadata(vol->v_softc, vol, sd, sd->sd_disk);
free(trs->trso_buffer, M_TR_raid1);
trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
@@ -246,6 +242,20 @@ g_raid_tr_raid1_rebuild_finish(struct g_
}
static void
+g_raid_tr_raid1_rebuild_finish(struct g_raid_tr_object *tr,
+ struct g_raid_volume *vol)
+{
+ struct g_raid_tr_raid1_object *trs;
+ struct g_raid_subdisk *sd;
+
+ trs = (struct g_raid_tr_raid1_object *)tr;
+ sd = trs->trso_failed_sd;
+ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE);
+ g_raid_tr_update_state_raid1(vol);
+ g_raid_tr_raid1_rebuild_done(trs, vol);
+}
+
+static void
g_raid_tr_raid1_rebuild_abort(struct g_raid_tr_object *tr,
struct g_raid_volume *vol)
{
@@ -255,16 +265,9 @@ g_raid_tr_raid1_rebuild_abort(struct g_r
trs = (struct g_raid_tr_raid1_object *)tr;
sd = trs->trso_failed_sd;
-// sd->sd_rebuild_pos = 0; /* We may need this here... */
len = MIN(g_raid1_rebuild_slab, vol->v_mediasize - sd->sd_rebuild_pos);
g_raid_unlock_range(tr->tro_volume, sd->sd_rebuild_pos, len);
- g_raid_write_metadata(vol->v_softc, vol, sd, sd->sd_disk);
- free(trs->trso_buffer, M_TR_raid1);
- trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
- trs->trso_type = TR_RAID1_NONE;
- trs->trso_recover_slabs = 0;
- trs->trso_failed_sd = NULL;
- trs->trso_buffer = NULL;
+ g_raid_tr_raid1_rebuild_done(trs, vol);
}
static struct g_raid_subdisk *
@@ -614,13 +617,16 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
* it.
*/
G_RAID_LOGREQ(4, bp,
- "rebuild write done. Error %d", bp->bio_error);
+ "rebuild write done. Error %d",
+ bp->bio_error);
+ nsd = trs->trso_failed_sd;
if (bp->bio_error != 0) {
+ g_raid_fail_disk(sd->sd_softc, nsd,
+ nsd->sd_disk);
g_raid_tr_raid1_rebuild_abort(tr, vol);
return;
}
/* XXX A lot of the following is needed when we kick of the work -- refactor */
- nsd = trs->trso_failed_sd;
g_raid_unlock_range(sd->sd_volume,
bp->bio_offset, bp->bio_length);
nsd->sd_rebuild_pos += bp->bio_length;
More information about the svn-src-projects
mailing list