From owner-svn-src-projects@FreeBSD.ORG Thu Jan 27 21:41:26 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 53DD810656C2; Thu, 27 Jan 2011 21:41:26 +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 297A78FC14; Thu, 27 Jan 2011 21:41:26 +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 p0RLfQtF037622; Thu, 27 Jan 2011 21:41:26 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0RLfQvm037620; Thu, 27 Jan 2011 21:41:26 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101272141.p0RLfQvm037620@svn.freebsd.org> From: Warner Losh Date: Thu, 27 Jan 2011 21:41:26 +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: r217989 - 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 21:41:26 -0000 Author: imp Date: Thu Jan 27 21:41:25 2011 New Revision: 217989 URL: http://svn.freebsd.org/changeset/base/217989 Log: Update every 100 recovery cycles. We update approx 1/gb now. 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 21:40:31 2011 (r217988) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Thu Jan 27 21:41:25 2011 (r217989) @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$"); #define SD_REBUILD_FAIR_IO 10 /* use 1/x of the available I/O */ #define SD_REBUILD_CLUSTER_BUSY 4 #define SD_REBUILD_CLUSTER_IDLE 10 +#define SD_REBUILD_META_UPDATE 100 /* update meta data every GB or so */ /* * We don't want to hammer the disk with I/O requests when doing a rebuild or @@ -71,6 +72,7 @@ struct g_raid_tr_raid1_object { int trso_type; int trso_recover_slabs; /* might need to be more */ int trso_fair_io; + int trso_meta_update; int trso_flags; struct g_raid_subdisk *trso_good_sd; /* specific rather than per tr */ struct g_raid_subdisk *trso_failed_sd;/* like per volume */ @@ -290,9 +292,9 @@ g_raid_tr_raid1_rebuild_start(struct g_r trs->trso_type = TR_RAID1_REBUILD; trs->trso_failed_sd->sd_rebuild_pos = 0; trs->trso_buffer = malloc(SD_REBUILD_SLAB, M_TR_raid1, M_WAITOK); + trs->trso_meta_update = SD_REBUILD_META_UPDATE; vol->v_to_arg = trs; vol->v_timeout = g_raid_tr_raid1_idle_rebuild; - /* XXX what else do I need to setup the first time? */ g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); } @@ -611,9 +613,11 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ return; } if (--trs->trso_recover_slabs <= 0) { - /* Have we done a substantial enough amount of recovery? */ - g_raid_write_metadata(vol->v_softc, vol, nsd, - nsd->sd_disk); + if (--trs->trso_meta_update <= 0) { + g_raid_write_metadata(vol->v_softc, + vol, nsd, nsd->sd_disk); + trs->trso_meta_update = SD_REBUILD_META_UPDATE; + } trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; return; }