From owner-svn-src-projects@FreeBSD.ORG Fri Feb 4 07:15:39 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6ABDC106566C; Fri, 4 Feb 2011 07:15:39 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5A8BA8FC0A; Fri, 4 Feb 2011 07:15:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p147Fd5L072966; Fri, 4 Feb 2011 07:15:39 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p147FdPt072964; Fri, 4 Feb 2011 07:15:39 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201102040715.p147FdPt072964@svn.freebsd.org> From: Warner Losh Date: Fri, 4 Feb 2011 07:15:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r218254 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Feb 2011 07:15:39 -0000 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;