From owner-svn-src-projects@FreeBSD.ORG Sun Feb 6 08:46:37 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 59F68106564A; Sun, 6 Feb 2011 08:46:37 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 489A88FC0A; Sun, 6 Feb 2011 08:46:37 +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 p168kbPl057831; Sun, 6 Feb 2011 08:46:37 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p168kbwx057829; Sun, 6 Feb 2011 08:46:37 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102060846.p168kbwx057829@svn.freebsd.org> From: Alexander Motin Date: Sun, 6 Feb 2011 08:46:37 +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: r218364 - 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: Sun, 06 Feb 2011 08:46:37 -0000 Author: mav Date: Sun Feb 6 08:46:37 2011 New Revision: 218364 URL: http://svn.freebsd.org/changeset/base/218364 Log: Use circular comparision of generations. If (unlikely) generations counter will ever wrap around, such logic may give a bit more reliable detection of the newest metadata copy. It is based on assumtion that all disk's metadata updated same time and should stay close and no disk should rejoin the array after being offline/failed/stale for more then half of generation counter wrap period. In last case this question just has no valid answer. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Sun Feb 6 07:41:27 2011 (r218363) +++ projects/graid/head/sys/geom/raid/md_intel.c Sun Feb 6 08:46:37 2011 (r218364) @@ -964,7 +964,7 @@ g_raid_md_intel_new_disk(struct g_raid_d } else { /* If we haven't started yet - check metadata freshness. */ if (mdi->mdio_meta == NULL || - pdmeta->generation > mdi->mdio_generation) { + ((int32_t)(pdmeta->generation - mdi->mdio_generation)) > 0) { G_RAID_DEBUG(1, "Newer disk"); if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_INTEL);