From owner-svn-src-projects@FreeBSD.ORG Thu Jan 27 02:27:17 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 AE922106564A; Thu, 27 Jan 2011 02:27:17 +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 83FC58FC0A; Thu, 27 Jan 2011 02:27:17 +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 p0R2RHfZ098044; Thu, 27 Jan 2011 02:27:17 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0R2RH8u098042; Thu, 27 Jan 2011 02:27:17 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101270227.p0R2RH8u098042@svn.freebsd.org> From: Warner Losh Date: Thu, 27 Jan 2011 02:27:17 +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: r217920 - 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: Thu, 27 Jan 2011 02:27:17 -0000 Author: imp Date: Thu Jan 27 02:27:17 2011 New Revision: 217920 URL: http://svn.freebsd.org/changeset/base/217920 Log: You can now remove the disk that's being rebuilt manually and we don't crash... # However, if we're rebuilding and reboot we notice this on the way up and # try to rebuild, but that goes horribly wrong, so beware... 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 Thu Jan 27 02:17:00 2011 (r217919) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Thu Jan 27 02:27:17 2011 (r217920) @@ -320,10 +320,13 @@ g_raid_tr_event_raid1(struct g_raid_tr_o g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_REBUILD); break; case G_RAID_SUBDISK_E_FAILED: - // XXX do I need to stop a rebuild here? + if (trs->trso_good_sd) + g_raid_tr_raid1_rebuild_abort(tr, vol); // g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_FAILED); break; case G_RAID_SUBDISK_E_DISCONNECTED: + if (trs->trso_good_sd) + g_raid_tr_raid1_rebuild_abort(tr, vol); g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NONE); break; case G_RAID_SUBDISK_E_TR_REBUILD_SOME: @@ -551,8 +554,8 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ * The read operation finished, queue the * write and get out. */ - G_RAID_LOGREQ(4, bp, - "rebuild read done. Error %d", bp->bio_error); + G_RAID_LOGREQ(4, bp, "rebuild read done. %d", + bp->bio_error); if (bp->bio_error != 0) { g_raid_tr_raid1_rebuild_abort(tr, vol); goto out; @@ -560,7 +563,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ cbp = g_clone_bio(pbp); cbp->bio_cmd = BIO_WRITE; cbp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - cbp->bio_offset = bp->bio_offset; /* Necessary? */ + cbp->bio_offset = bp->bio_offset; cbp->bio_length = bp->bio_length; G_RAID_LOGREQ(4, bp, "Queueing reguild write."); g_raid_subdisk_iostart(trs->trso_failed_sd, cbp);