From owner-svn-src-projects@FreeBSD.ORG Fri Jan 14 05:25:45 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 0E6C8106566C; Fri, 14 Jan 2011 05:25:45 +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 F1FB98FC19; Fri, 14 Jan 2011 05:25:44 +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 p0E5Pib8075901; Fri, 14 Jan 2011 05:25:44 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0E5PiZb075899; Fri, 14 Jan 2011 05:25:44 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101140525.p0E5PiZb075899@svn.freebsd.org> From: Warner Losh Date: Fri, 14 Jan 2011 05:25:44 +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: r217389 - 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, 14 Jan 2011 05:25:45 -0000 Author: imp Date: Fri Jan 14 05:25:44 2011 New Revision: 217389 URL: http://svn.freebsd.org/changeset/base/217389 Log: Fix bug in overlaps that Pawel pointed out. Modified: projects/graid/head/sys/geom/raid/g_raid.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Fri Jan 14 04:24:53 2011 (r217388) +++ projects/graid/head/sys/geom/raid/g_raid.c Fri Jan 14 05:25:44 2011 (r217389) @@ -733,7 +733,7 @@ g_raid_start(struct bio *bp) } static int -g_raid_bio_overlaps(const struct bio *bp, off_t off, off_t len) +g_raid_bio_overlaps(const struct bio *bp, off_t lstart, off_t len) { /* * 5 cases: @@ -750,10 +750,13 @@ g_raid_bio_overlaps(const struct bio *bp * (4) 12-14: passes both ifs * (5) 19-20: passes both */ + off_t lend = lstart + len - 1; + off_t bstart = bp->bio_offset; + off_t bend = bp->bio_offset + bp->bio_length - 1; - if (bp->bio_offset + bp->bio_length - 1 < off) + if (bend < lstart) return (0); - if (bp->bio_offset < off + len - 1) + if (lend < bstart) return (0); return (1); }