Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Aug 2007 11:28:26 +0200
From:      =?ISO-8859-1?Q?S=F8ren_Schmidt?= <sos@deepcore.dk>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        Graham <gbradley@rocketmail.com>, freebsd-geom@FreeBSD.ORG
Subject:   Re: kern/115572: ata disk bug
Message-ID:  <46C80D3A.4020507@deepcore.dk>
In-Reply-To: <83156.1187508376@critter.freebsd.dk>
References:  <83156.1187508376@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
Poul-Henning Kamp wrote:
> In message <200708182120.l7ILKBvF046099@freefall.freebsd.org>, Graham w=
rites:
>
>  =20
>> 2. attempt (say)....
>> rabbit# dd if=3D/dev/zero of=3D/dev/ad4s1 oseek=3D2097151 count=3D1 bs=
=3D64k
>> and the result is....
>> dd: /dev/ad4s1: Input/output error
>> 1+0 records in
>> 0+0 records out
>> 0 bytes transferred in 0.000325 secs (0 bytes/sec)
>>
>> (If dd is performed on the raw drive, /dev/ad4 then block boundary is
>> always a power of 2, and blocksize a smaller power of 2.  That's alway=
s
>> ok.  But we can't assume we use drives that way.)
>>
>> So a transfer which starts in the 28-bit zone, but extends over into
>> the 48-bit region, fails.  Such transfers happen in the superblock of
>> certain size drives, and that plays havoc.  The sector mapping of gbde=

>> can do this, but soft-update gets screwed by this happening.  It's not=

>> actually to do with the crypto as I first suspected.
>>    =20
>
> This is a problem in the ata disk driver.
>  =20
Yeah, the crossover point from using 28bit to 48bit addressing is=20
flawed, below patch should fix that:

--- ata-all.c   23 Feb 2007 16:25:08 -0000      1.279
+++ ata-all.c   19 Aug 2007 09:25:58 -0000
@@ -738,7 +738,7 @@
=20
     atadev->flags &=3D ~ATA_D_48BIT_ACTIVE;
=20
-    if ((request->u.ata.lba >=3D ATA_MAX_28BIT_LBA ||
+    if (((request->u.ata.lba + request->u.ata.count) >=3D=20
ATA_MAX_28BIT_LBA ||
         request->u.ata.count > 256) &&
        atadev->param.support.command2 & ATA_SUPPORT_ADDRESS48) {
=20


-S=F8ren
>
>
>  =20





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?46C80D3A.4020507>