Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Feb 2011 07:15:39 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r218254 - projects/graid/head/sys/geom/raid
Message-ID:  <201102040715.p147FdPt072964@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102040715.p147FdPt072964>