From: Eric Mudama <edmudama@gmail.com>
To: Greg Stark <gsstark@mit.edu>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
Brad Campbell <brad@wasp.net.au>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Jeff Garzik <jgarzik@pobox.com>
Subject: Re: Crashed Drive, libata wedges when trying to recover data
Date: Fri, 3 Sep 2004 11:08:36 -0600 [thread overview]
Message-ID: <311601c904090310083d057c25@mail.gmail.com> (raw)
In-Reply-To: <871xhjti4b.fsf@stark.xeocode.com>
On 03 Sep 2004 12:47:00 -0400, Greg Stark <gsstark@mit.edu> wrote:
> Alan Cox <alan@lxorguk.ukuu.org.uk> writes:
>
> > On Gwe, 2004-09-03 at 16:58, Greg Stark wrote:
> > > I've even unmounted the filesystem and tried mounting it again. Now I can't
> > > even mount it without generating the error.
> >
> > You may well need to reset or powercycle the drive to get it back from
> > such a state.
>
> Certainly I know power cycling fixes it. That's what I've been doing so far.
>
> > > Sep 3 11:48:39 stark kernel: ata1: command 0x25 timeout, stat 0x59 host_stat 0x21
> > > Sep 3 11:48:39 stark kernel: ata1: status=0x59 { DriveReady SeekComplete DataRequest Error }
> > > Sep 3 11:48:39 stark kernel: ata1: error=0x01 { AddrMarkNotFound }
> >
> > "Its dead Jim". Once you get a drive that dies totally (or just keeps
> > posting up a hardware fail) after the error you are into forensics
> > (and/or backup) land.
>
> There's nothing the driver can do to reset the drive or get back to a known
> good protocol state?
>
> The "ATA: abnormal status 0x59 on port 0xEFE7" makes me think it's just the
> driver getting out of sync with the drive. But i guess that would be hard to
> distinguish from the drive just going south.
Here's my guess at what is happening:
0x59/xx is an artifact of PATA drives being required to transfer bogus
data on an error to satisfy the way the DMA controller was programmed
at the start of the transfer. Most all drives used this same
technique in PIO modes too, sharing common transfer code in their
firmware.
This behavior, unfortunately, caused a ruckus in SATA ... At least
one SATA controller immediately starts sending HOLD primitives when
they see the error bit get set.
In PATA, you can asynchronously issue a soft reset or a new command,
to abort the data transfer for the invalid command. However, in SATA,
once the board starts sending HOLD primitives and the drive responds
with HOLDA, there's no way to transition into X_RDY to send the soft
reset or a new command. Boom, you're deadlocked. This means that in
SATA, the only way to overcome this deadlock in the driver is to have
the host/board generate a COMRESET OOB burst to hard-reset the drive.
Today's (and tomorrow's) generation of SATA drives will never ever
generate a 0x59 status... the error and DRQ bits become mutually
exclusive. However, unfortunately, there are quite a few drives in
the field which have this behavior...
--eric
next prev parent reply other threads:[~2004-09-03 17:11 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-02 8:32 Crashed Drive, libata wedges when trying to recover data Greg Stark
2004-09-02 9:05 ` Brad Campbell
2004-09-03 4:52 ` Greg Stark
2004-09-03 5:13 ` Greg Stark
2004-09-03 11:08 ` Alan Cox
2004-09-03 14:27 ` Greg Stark
2004-09-03 13:53 ` Alan Cox
2004-09-03 15:58 ` Greg Stark
2004-09-03 15:09 ` Alan Cox
2004-09-03 16:47 ` Greg Stark
2004-09-03 17:08 ` Eric Mudama [this message]
2004-09-03 17:35 ` Greg Stark
2004-09-03 17:57 ` Greg Stark
2004-09-03 19:45 ` Brad Campbell
2004-09-04 0:10 ` Eric Mudama
2004-09-03 12:51 ` Brad Campbell
2004-09-03 14:09 ` Alan Cox
2004-09-04 21:58 ` Greg Stark
2004-09-05 4:02 ` Brad Campbell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=311601c904090310083d057c25@mail.gmail.com \
--to=edmudama@gmail.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=brad@wasp.net.au \
--cc=gsstark@mit.edu \
--cc=jgarzik@pobox.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox