From owner-freebsd-bugs@FreeBSD.ORG Sun Oct 10 10:30:21 2004 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A683E16A4D6 for ; Sun, 10 Oct 2004 10:30:21 +0000 (GMT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7CCC243D31 for ; Sun, 10 Oct 2004 10:30:21 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.11/8.12.11) with ESMTP id i9AAULNs013340 for ; Sun, 10 Oct 2004 10:30:21 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.11/8.12.11/Submit) id i9AAULLi013339; Sun, 10 Oct 2004 10:30:21 GMT (envelope-from gnats) Resent-Date: Sun, 10 Oct 2004 10:30:21 GMT Resent-Message-Id: <200410101030.i9AAULLi013339@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Daisuke Takahashi Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id D3A1116A4CE for ; Sun, 10 Oct 2004 10:20:51 +0000 (GMT) Received: from www.freebsd.org (www.freebsd.org [216.136.204.117]) by mx1.FreeBSD.org (Postfix) with ESMTP id AA8E943D39 for ; Sun, 10 Oct 2004 10:20:51 +0000 (GMT) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.12.11/8.12.11) with ESMTP id i9AAKpnr025407 for ; Sun, 10 Oct 2004 10:20:51 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.12.11/8.12.11/Submit) id i9AAKpRm025406; Sun, 10 Oct 2004 10:20:51 GMT (envelope-from nobody) Message-Id: <200410101020.i9AAKpRm025406@www.freebsd.org> Date: Sun, 10 Oct 2004 10:20:51 GMT From: Daisuke Takahashi To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-2.3 Subject: kern/72478: ata: dd destroy FreeBSD raid header X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Oct 2004 10:30:21 -0000 >Number: 72478 >Category: kern >Synopsis: ata: dd destroy FreeBSD raid header >Confidential: no >Severity: critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Oct 10 10:30:20 GMT 2004 >Closed-Date: >Last-Modified: >Originator: Daisuke Takahashi >Release: FreeBSD 5.3-BETA7 >Organization: personal >Environment: FreeBSD mika-l.lodaldomain 5.3-BETA7 FreeBSD 5.3-BETA7 #1: Sun Oct 10 17:42:06 JST 2004 root@mika-l.lodaldomain:/usr/src/sys/i386/compile/GENERIC i386 - - - Oct 10 16:33:58 mika-l kernel: ad1: 102MB [208/16/63] at ata0-slave UDMA33 Oct 10 16:33:58 mika-l kernel: ad3: 204MB [416/16/63] at ata1-slave UDMA33 >Description: I created ar0 as follow. # atacontrol create SPAN ad1 ad3 syslog as follow Oct 10 16:36:31 mika-l kernel: ar0: 204MB [26/255/63] status: READY subdisks: Oct 10 16:36:31 mika-l kernel: disk0 READY on ad1 at ata0-slave Oct 10 16:36:31 mika-l kernel: disk1 READY on ad3 at ata1-slave But when I use entire space of ar0, ar0 reports "ar0: ERROR - array broken" at next boot time. Oct 10 16:39:41 mika-l kernel: ar0: ERROR - array broken Oct 10 16:39:41 mika-l kernel: ar0: 204MB [26/255/63] status: BROKEN subdisks: Oct 10 16:39:41 mika-l kernel: disk0 DOWN no device found for this disk Oct 10 16:39:41 mika-l kernel: disk1 READY on ad3 at ata1-slave >How-To-Repeat: 1. create ar0 as SPAN disk # atacontrol create SPAN ad1 ad3 2. write '0' to entire ar0 # dd if=/dev/zero of=/dev/ar0 bs=64k 3. reboot >Fix: --- ata-raid.c.orig Tue Jan 27 14:53:19 2004 +++ ata-raid.c Thu Sep 30 15:55:23 2004 @@ -556,9 +560,9 @@ switch (rdp->flags & (AR_F_RAID0 | AR_F_RAID1 | AR_F_SPAN)) { case AR_F_SPAN: lba = blkno; - while (lba >= AD_SOFTC(rdp->disks[drv])->total_secs-rdp->reserved) - lba -= AD_SOFTC(rdp->disks[drv++])->total_secs-rdp->reserved; - chunk = min(AD_SOFTC(rdp->disks[drv])->total_secs-rdp->reserved-lba, + while (lba >= rdp->disks[drv].disk_sectors) + lba -= rdp->disks[drv++].disk_sectors; + chunk = min(rdp->disks[drv].disk_sectors-lba, count); break; @@ -670,9 +674,9 @@ switch (rdp->flags & (AR_F_RAID0 | AR_F_RAID1 | AR_F_SPAN)) { case AR_F_SPAN: lba = blkno; - while (lba >= AD_SOFTC(rdp->disks[drv])->total_secs-rdp->reserved) - lba -= AD_SOFTC(rdp->disks[drv++])->total_secs-rdp->reserved; - chunk = min(AD_SOFTC(rdp->disks[drv])->total_secs-rdp->reserved-lba, + while (lba >= rdp->disks[drv].disk_sectors) + lba -= rdp->disks[drv++].disk_sectors; + chunk = min(rdp->disks[drv].disk_sectors-lba, count); break; >Release-Note: >Audit-Trail: >Unformatted: