From owner-FreeBSD-users-jp@jp.FreeBSD.org Thu Sep 30 16:27:12 2004
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id i8U7RCE76480;
	Thu, 30 Sep 2004 16:27:12 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from tyo206.gate.nec.co.jp (TYO206.gate.nec.co.jp [202.32.8.206])
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) with ESMTP/inet id i8U7RB876475
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Thu, 30 Sep 2004 16:27:11 +0900 (JST)
	(envelope-from d-takahashi@bc.jp.nec.com)
Received: from mailgate3.nec.co.jp ([10.7.69.161])
	by tyo206.gate.nec.co.jp (8.11.7/3.7W02122014) with ESMTP id i8U7RAj01689
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Thu, 30 Sep 2004 16:27:10 +0900 (JST)
Received: (from root@localhost) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC)
	id i8U7R9F08607 for FreeBSD-users-jp@jp.FreeBSD.org; Thu, 30 Sep 2004 16:27:09 +0900 (JST)
Received: from komachi.jp.nec.com (komachi.jp.nec.com [10.26.220.10]) by mailsv.nec.co.jp (8.11.7/3.7W-MAILSV-NEC) with ESMTP
	id i8U7R8W10869 for <FreeBSD-users-jp@jp.FreeBSD.org>; Thu, 30 Sep 2004 16:27:08 +0900 (JST)
Received: from localhost ([10.17.1.19] [10.17.1.19]) by mail.jp.nec.com with ESMTP; Thu, 30 Sep 2004 16:27:07 +0900
Message-Id: <20040930.162705.41725811.takaha@mue.biglobe.ne.jp>
To: FreeBSD-users-jp@jp.FreeBSD.org
From: Daisuke Takahashi <takaha@mue.biglobe.ne.jp>
In-Reply-To: <86brghojf8.wl@plenty.hypercube.gld.mmtr.or.jp>
References: <20040720.015153.104029279.say@khaotic.net>
	<86brghojf8.wl@plenty.hypercube.gld.mmtr.or.jp>
X-Mailer: Mew version 3.3 on Emacs 20.7 / Mule 4.0 (HANANOEN)
Mime-Version: 1.0
Content-Type: Multipart/Mixed;
 boundary="--Next_Part(Thu_Sep_30_16:27:05_2004_424)--"
Content-Transfer-Encoding: 7bit
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
Date: Thu, 30 Sep 2004 16:27:05 +0900
X-Sequence: FreeBSD-users-jp 81130
Subject: [FreeBSD-users-jp 81130] Re: atacontrol create SPAN
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: takaha@mue.biglobe.ne.jp
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+040925

----Next_Part(Thu_Sep_30_16:27:05_2004_424)--
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit


$B9b66$G$9!#(B

From: Akihiro Sato <akisatoh@gld.mmtr.or.jp>
Subject: [FreeBSD-users-jp 80793] Re: atacontrol create SPAN
Date: Wed, 08 Sep 2004 06:31:23 +0900

> $B$7$+$7!"(Bar1$B$r%<%m%/%j%"$7$F$b!"0l8+@5>o$G$9$,!"(B
> # dd if=/dev/zero of=/dev/ar1 bs=1m
> # atacontrol status ar1
> ar1: ATA SPAN subdisks: ad3 ad1 status: READY
> $B:F5/F0$9$k$H5/F0;~$K0J2<$N%a%C%;!<%8$,=P$F$7$^$$$^$9!#(B
> ar1: ERROR - array broken
> ar1: 511MB <ATA SPAN array> [65/255/63] status: BROKRN subdisks:
>  disk0 DOWN no device found for this disk
>  disk1 READY on ad1 at ata1-slave
> $B;H$C$F$$$k$H2u$l$F$7$^$&(BSPAN$B$N$h$&$G$9!#(B

5.2.1-RELEASE$B$GF1$8LdBj$K$G$/$o$7$^$7$?!#(B
quick hack$B$G$O$"$j$^$9$,!"%Q%C%A$r$D$/$C$F$_$^$7$?!#(B

$B$H$j$"$($:(Bdump$B<~$j0J30$O0lDL$jF0:n$9$k$3$H$r3NG'$7$^$7$?$,!"(BSPAN$B$r>oMQ(B
$B$O$7$F$$$^$;$s!#(B


$B;~4V$,$"$k;~$K$G$b(Bsend-pr$B$7$F$*$-$^$9!#(B

 
> $B!tC/$b:$$C$F$$$J$$$H$$$&$3$H$O!"(Batacontrol$B$O(BRAID BIOS$BEk:\(B
> $B!t%3%s%H%m!<%i$G$7$+;H$o$l$F$$$J$$$s$@$J$!!#(B

$B?7$?$K(BHDD$B$+$iD4C#$9$k$N$G$"$l$P(Bstrip$B$G@_Dj$9$k$G$7$g$&$7!"(BSPAN$B$r;H$&?M(B
$B$,$[$H$s$I$$$J$$(B...$B$N$G$7$g$&$M!#(B

---
Daisuke Takahashi / $b$7$+$7$F2K$G$9$+!)

----Next_Part(Thu_Sep_30_16:27:05_2004_424)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="ata-raid.c.diff"

--- ata-raid.c.orig	Tue Jan 27 14:53:19 2004
+++ ata-raid.c	Thu Sep 30 15:55:23 2004
@@ -342,10 +342,14 @@
 	    else
 		rdp->flags |= ctlr;
 	    
-	    if (disk_size)
-		disk_size = min(rdp->disks[disk].disk_sectors, disk_size);
-	    else
-		disk_size = rdp->disks[disk].disk_sectors;
+	    if (setup->type == 4) { 
+		disk_size += rdp->disks[disk].disk_sectors;
+	    } else {
+	        if (disk_size)
+		    disk_size = min(rdp->disks[disk].disk_sectors, disk_size);
+	        else
+		    disk_size = rdp->disks[disk].disk_sectors;
+	    }
 	    rdp->disks[disk].flags = 
 		(AR_DF_PRESENT | AR_DF_ASSIGNED | AR_DF_ONLINE);
 
@@ -401,7 +405,7 @@
     }
     rdp->total_disks = total_disks;
     rdp->width = total_disks / ((rdp->flags & AR_F_RAID1) ? 2 : 1);	
-    rdp->total_sectors = disk_size * rdp->width;
+    rdp->total_sectors = (setup->type != 4) ? (disk_size * rdp->width) : disk_size;
     rdp->heads = 255;
     rdp->sectors = 63;
     rdp->cylinders = rdp->total_sectors / (255 * 63);
@@ -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;
 	

----Next_Part(Thu_Sep_30_16:27:05_2004_424)----
