linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mark Lord <lkml@rtr.ca>
To: David Greaves <david@dgreaves.com>
Cc: Justin Piszcz <jpiszcz@lucidpixels.com>,
	Jeff Garzik <jgarzik@pobox.com>,
	linux-kernel@vger.kernel.org,
	IDE/ATA development list <linux-ide@vger.kernel.org>
Subject: Re: LibPATA code issues / 2.6.15.4
Date: Sat, 25 Feb 2006 11:20:04 -0500	[thread overview]
Message-ID: <440083B4.3030307@rtr.ca> (raw)
In-Reply-To: <440040B4.8030808@dgreaves.com>

[-- Attachment #1: Type: text/plain, Size: 1443 bytes --]

David Greaves wrote:
..
> Thanks Mark - I've finally gotten this patch applied.
> 
> With smartd disabled and no smart commands issued, a readonly badblocks
> scan of /dev/sdb2 shows no problems and now gives:
> Feb 25 10:38:31 haze kernel: ata2: status=0x51 { DriveReady SeekComplete
> Error }
> Feb 25 10:38:32 haze kernel: ata2: no sense translation for op=0x28
> status: 0x51
> Feb 25 10:38:32 haze kernel: ata2: status=0x51 { DriveReady SeekComplete
> Error }
> Feb 25 10:38:35 haze kernel: ata2: no sense translation for op=0x28
> status: 0x51
> hundreds of times.
..

Mmmm.. okay, it's happening due to a SCSI READ_10 opcode,
which means it isn't being triggered by any of the FUA stuff.

But there's still no obvious reason for the error.
The drive is basically just saying "command rejected",
and libata-scsi is translating that into "medium error"
for some unknown reason.

Unfortunately, the design of the current libata is such that
we no longer have access to the actual ATA opcode that was rejected.
It gets overwritten by the returned drive status on completion.

So.. I need to generate another patch for you now, to save/show
the real ATA opcode that was used to cause the errors.
My theory is that we'll discover that it is one that your drive
legitimately is rejecting (unsupported LBA48 or something..).

But we won't know until we see the output.

Second patch is attached:  apply *in addition* to the first one.

Cheers


[-- Attachment #2: 12_libata_ata_opcode.patch --]
[-- Type: text/x-patch, Size: 5983 bytes --]

--- linux/drivers/scsi/libata-core.c.orig	2006-02-23 16:15:52.000000000 -0500
+++ linux/drivers/scsi/libata-core.c	2006-02-25 11:17:42.000000000 -0500
@@ -253,10 +253,11 @@
  *	spin_lock_irqsave(host_set lock)
  */
 
-static void ata_exec_command_pio(struct ata_port *ap, const struct ata_taskfile *tf)
+static void ata_exec_command_pio(struct ata_port *ap, struct ata_taskfile *tf)
 {
 	DPRINTK("ata%u: cmd 0x%X\n", ap->id, tf->command);
 
+	tf->saved_command = tf->command;
        	outb(tf->command, ap->ioaddr.command_addr);
 	ata_pause(ap);
 }
@@ -274,10 +275,11 @@
  *	spin_lock_irqsave(host_set lock)
  */
 
-static void ata_exec_command_mmio(struct ata_port *ap, const struct ata_taskfile *tf)
+static void ata_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf)
 {
 	DPRINTK("ata%u: cmd 0x%X\n", ap->id, tf->command);
 
+	tf->saved_command = tf->command;
        	writeb(tf->command, (void __iomem *) ap->ioaddr.command_addr);
 	ata_pause(ap);
 }
@@ -294,7 +296,7 @@
  *	LOCKING:
  *	spin_lock_irqsave(host_set lock)
  */
-void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf)
+void ata_exec_command(struct ata_port *ap, struct ata_taskfile *tf)
 {
 	if (ap->flags & ATA_FLAG_MMIO)
 		ata_exec_command_mmio(ap, tf);
@@ -316,7 +318,7 @@
  */
 
 static inline void ata_tf_to_host(struct ata_port *ap,
-				  const struct ata_taskfile *tf)
+				  struct ata_taskfile *tf)
 {
 	ap->ops->tf_load(ap, tf);
 	ap->ops->exec_command(ap, tf);
@@ -506,12 +508,13 @@
  *	Inherited from caller.
  */
 
-void ata_tf_to_fis(const struct ata_taskfile *tf, u8 *fis, u8 pmp)
+void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp)
 {
 	fis[0] = 0x27;	/* Register - Host to Device FIS */
 	fis[1] = (pmp & 0xf) | (1 << 7); /* Port multiplier number,
 					    bit 7 indicates Command FIS */
 	fis[2] = tf->command;
+	tf->saved_command = tf->command;
 	fis[3] = tf->feature;
 
 	fis[4] = tf->lbal;
@@ -631,6 +634,7 @@
 	cmd = ata_rw_cmds[index + fua + lba48 + write];
 	if (cmd) {
 		tf->command = cmd;
+		tf->saved_command = cmd;
 		return 0;
 	}
 	return -1;
--- linux/drivers/scsi/libata-scsi.c.orig	2006-02-25 10:58:41.000000000 -0500
+++ linux/drivers/scsi/libata-scsi.c	2006-02-25 11:16:07.000000000 -0500
@@ -438,7 +438,7 @@
  *	spin_lock_irqsave(host_set lock)
  */
 void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, u8 *asc, 
-			u8 *ascq, u8 opcode)
+			u8 *ascq, u8 opcode, u8 cmd)
 {
 	int i;
 
@@ -517,8 +517,8 @@
 		}
 	}
 	/* No error?  Undecoded? */
-	printk(KERN_WARNING "ata%u: no sense translation for op=0x%02x status: 0x%02x\n", 
-	       id, opcode, drv_stat);
+	printk(KERN_WARNING "ata%u: no sense translation for op=0x%02x cmd=0x%02x status: 0x%02x\n", 
+	       id, opcode, cmd, drv_stat);
 
 	/* For our last chance pick, use medium read error because
 	 * it's much more common than an ATA drive telling you a write
@@ -529,8 +529,8 @@
 	*ascq = 0x04; /*  "auto-reallocation failed" */
 
  translate_done:
-	DPRINTK(KERN_ERR "ata%u: translated op=0x%02x ATA stat/err 0x%02x/%02x to "
-	       "SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n", id, opcode, drv_stat, drv_err,
+	DPRINTK(KERN_ERR "ata%u: translated op=0x%02x cmd=0x%02x ATA stat/err 0x%02x/%02x to "
+	       "SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n", id, opcode, cmd, drv_stat, drv_err,
 	       *sk, *asc, *ascq);
 	return;
 }
@@ -571,7 +571,7 @@
 	 */
 	if (tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
 		ata_to_sense_error(qc->ap->id, tf->command, tf->feature,
-				   &sb[1], &sb[2], &sb[3], cmd->cmnd[0]);
+				   &sb[1], &sb[2], &sb[3], cmd->cmnd[0], tf->saved_command);
 		sb[1] &= 0x0f;
 	}
 
@@ -646,7 +646,7 @@
 	 */
 	if (tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
 		ata_to_sense_error(qc->ap->id, tf->command, tf->feature,
-				   &sb[2], &sb[12], &sb[13], cmd->cmnd[0]);
+				   &sb[2], &sb[12], &sb[13], cmd->cmnd[0], tf->saved_command);
 		sb[2] &= 0x0f;
 	}
 
@@ -1337,6 +1337,7 @@
 		goto early_finish;
 
 	/* select device, send command to hardware */
+	qc->tf.saved_command = qc->tf.command;
 	if (ata_qc_issue(qc))
 		goto err_did;
 
--- linux/include/linux/ata.h.orig	2006-02-17 17:23:45.000000000 -0500
+++ linux/include/linux/ata.h	2006-02-25 11:09:53.000000000 -0500
@@ -244,6 +244,7 @@
 	u8			device;
 
 	u8			command;	/* IO operation */
+	u8			saved_command;	/* IO operation */
 };
 
 #define ata_id_is_ata(id)	(((id)[0] & (1 << 15)) == 0)
--- linux/include/linux/libata.h.orig	2006-02-23 16:15:53.000000000 -0500
+++ linux/include/linux/libata.h	2006-02-25 11:17:14.000000000 -0500
@@ -420,7 +420,7 @@
 	void (*tf_load) (struct ata_port *ap, const struct ata_taskfile *tf);
 	void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
 
-	void (*exec_command)(struct ata_port *ap, const struct ata_taskfile *tf);
+	void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
 	u8   (*check_status)(struct ata_port *ap);
 	u8   (*check_altstatus)(struct ata_port *ap);
 	void (*dev_select)(struct ata_port *ap, unsigned int device);
@@ -512,13 +512,13 @@
  */
 extern void ata_tf_load(struct ata_port *ap, const struct ata_taskfile *tf);
 extern void ata_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
-extern void ata_tf_to_fis(const struct ata_taskfile *tf, u8 *fis, u8 pmp);
+extern void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp);
 extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf);
 extern void ata_noop_dev_select (struct ata_port *ap, unsigned int device);
 extern void ata_std_dev_select (struct ata_port *ap, unsigned int device);
 extern u8 ata_check_status(struct ata_port *ap);
 extern u8 ata_altstatus(struct ata_port *ap);
-extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf);
+extern void ata_exec_command(struct ata_port *ap, struct ata_taskfile *tf);
 extern int ata_port_start (struct ata_port *ap);
 extern void ata_port_stop (struct ata_port *ap);
 extern void ata_host_stop (struct ata_host_set *host_set);

  reply	other threads:[~2006-02-25 16:20 UTC|newest]

Thread overview: 147+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-02-14  9:48 LibPATA code issues / 2.6.15.4 Justin Piszcz
2006-02-14 14:50 ` Mark Lord
2006-02-14 16:27   ` David Greaves
2006-02-14 17:12     ` Justin Piszcz
2006-02-14 18:00       ` Mark Lord
2006-02-14 18:06         ` Justin Piszcz
2006-02-23 23:39         ` Justin Piszcz
2006-02-25 15:32           ` Mark Lord
2006-02-25 15:58             ` Justin Piszcz
2006-02-25 16:11               ` Jesper Juhl
2006-02-25 16:21               ` Mark Lord
2006-02-25 11:34         ` David Greaves
2006-02-25 16:20           ` Mark Lord [this message]
2006-02-25 17:45             ` Justin Piszcz
2006-02-25 18:28               ` Mark Lord
2006-02-25 18:55                 ` Justin Piszcz
2006-02-25 19:29                 ` Justin Piszcz
2006-02-25 19:53                   ` David Greaves
2006-02-25 19:47                 ` David Greaves
2006-02-26  2:27                   ` Mark Lord
2006-02-26  9:56                     ` David Greaves
2006-02-26 14:04                       ` Mark Lord
2006-02-27 21:34                         ` Mark Lord
2006-02-28  1:33                           ` Tejun Heo
2006-02-28  1:46                             ` Linus Torvalds
2006-02-28  2:07                               ` Jeff Garzik
2006-02-28  2:14                                 ` Linus Torvalds
2006-02-28  2:52                                   ` Jeff Garzik
2006-02-28  3:36                                   ` Jeff Garzik
2006-02-28  4:11                                     ` Mark Lord
2006-02-28 10:30                                 ` Alan Cox
2006-02-28  8:03                               ` Jens Axboe
2006-02-28  4:16                             ` Mark Lord
2006-02-28 10:32                               ` Alan Cox
2006-02-28 10:30                                 ` Justin Piszcz
2006-02-28 10:39                               ` David Greaves
2006-02-28 14:37                                 ` Mark Lord
2006-02-28 21:04                                   ` Bill Davidsen
2006-03-08  2:57                                     ` Mark Lord
2006-03-08  3:18                                       ` Dave Jones
2006-03-08  3:23                                         ` Mark Lord
2006-03-08 15:37                                       ` Bill Davidsen
2006-02-28 14:38                                 ` Mark Lord
2006-02-28 15:16                                   ` Alan Cox
2006-03-01 17:33                                     ` David Greaves
2006-03-01 18:37                                       ` Alan Cox
2006-03-01 20:12                                         ` Phillip Susi
2006-03-08 16:46                                           ` Alan Cox
2006-02-28 15:31                                 ` Mark Lord
2006-02-28 15:34                                   ` Jeff Garzik
2006-02-28 16:57                                     ` Eric D. Mudama
2006-03-01  1:04                                       ` Mark Lord
2006-03-01 11:37                                         ` Justin Piszcz
2006-03-01 13:17                                         ` Justin Piszcz
2006-03-01 17:41                                     ` David Greaves
2006-03-01 17:46                                       ` Mark Lord
2006-03-01 18:12                                         ` David Greaves
2006-03-01 18:30                                           ` Mark Lord
2006-03-01 18:32                                             ` Justin Piszcz
2006-03-01 18:33                                             ` Justin Piszcz
2006-03-01 18:48                                             ` David Greaves
2006-03-01 19:49                                               ` David Greaves
2006-03-03 19:38                                                 ` Justin Piszcz
2006-03-03 22:46                                                   ` David Greaves
2006-03-04 14:25                                                     ` Mark Lord
2006-03-06  6:13                                                       ` David Greaves
2006-03-21 18:11                                                         ` David Greaves
2006-03-22 15:23                                                           ` David Greaves
2006-03-05 11:43                                                 ` Justin Piszcz
2006-03-05 12:41                                                   ` Justin Piszcz
2006-03-05 22:58                                                     ` Mark Lord
2006-03-05 23:00                                                       ` Mark Lord
2006-03-05 23:19                                                         ` Justin Piszcz
2006-03-05 23:39                                                       ` Jeff Garzik
2006-04-21 19:14                                                         ` LibPATA code issues / 2.6.16 (previously, 2.6.15.x) Justin Piszcz
2006-04-21 19:18                                                           ` Jeff Garzik
2006-04-21 19:28                                                             ` Linus Torvalds
2006-04-21 22:46                                                               ` Jeff Garzik
2006-04-22  0:05                                                                 ` Linus Torvalds
2006-05-06 15:09                                                                   ` [smartmontools-support]Re: " Leon Woestenberg
2006-05-07 12:44                                                                     ` Ingo Oeser
2006-06-11 11:13                                                                   ` Justin Piszcz
2006-03-01 19:06                                             ` LibPATA code issues / 2.6.15.4 Justin Piszcz
2006-03-01 19:28                                               ` Mark Lord
2006-03-01 19:35                                               ` Mark Lord
2006-03-01 19:38                                                 ` Justin Piszcz
2006-03-01 19:41                                                   ` Jeff Garzik
2006-02-26 12:27                     ` James Courtier-Dutton
2006-02-26 12:55                       ` David Greaves
2006-02-26 13:56                       ` Mark Lord
2006-02-26 14:30                         ` Kernel SeekCompleteErrors... Different from " James Courtier-Dutton
2006-02-26 17:03                           ` Mark Lord
2006-02-26 17:13                             ` Dr. David Alan Gilbert
2006-02-26 17:43                               ` Alan Cox
2006-02-26 20:36                                 ` Mark Lord
2006-02-27 11:48                                   ` Alan Cox
2006-02-27 13:40                                     ` Mark Lord
2006-02-14 23:58   ` Justin Piszcz
2006-02-17  8:45   ` Jeff Garzik
2006-02-17 14:59     ` Mark Lord
2006-02-17 15:00       ` Justin Piszcz
2006-02-18 20:43       ` Sander
2006-02-18 21:42         ` Mark Lord
2006-02-18 21:51           ` Justin Piszcz
2006-02-19  7:14           ` Sander
2006-02-19 15:30             ` Mark Lord
2006-02-19 17:16               ` Sander
2006-07-06 23:08                 ` Justin Piszcz
2006-07-07 13:08                   ` Mark Lord
2006-07-07 13:24                     ` Justin Piszcz
2006-07-07 13:43                       ` Mark Lord
2006-07-07 13:48                         ` Justin Piszcz
2006-07-07 14:01                         ` Justin Piszcz
2006-07-07 14:35                         ` Justin Piszcz
2006-07-07 18:53                           ` Justin Piszcz
2006-07-07 19:19                             ` Jeff Garzik
2006-07-07 19:28                               ` Justin Piszcz
     [not found]                                 ` <200607091224.31451.liml@rtr.ca>
2006-07-09 17:27                                   ` Justin Piszcz
2006-07-09 20:16                                     ` Justin Piszcz
2006-07-09 20:40                                       ` LibPATA code issues / 2.6.15.4 (found the opcode=0x35)! Justin Piszcz
2006-07-09 20:46                                         ` Justin Piszcz
2006-07-09 21:05                                           ` Justin Piszcz
2006-07-09 22:03                                             ` Justin Piszcz
2006-07-10 13:59                                               ` Follow up? " Justin Piszcz
2006-07-10 15:33                                                 ` Alan Cox
2006-07-10 15:45                                                   ` Justin Piszcz
2006-07-11 13:28                                                     ` LibPATA code issues / 2.6.17.3 (What is the next step?) Justin Piszcz
2006-07-11 16:12                                                       ` Alan Cox
2006-07-12 22:10                                                         ` David Greaves
2006-07-12 22:29                                                           ` Justin Piszcz
2006-07-14 15:33                                                             ` David Greaves
2006-07-13 10:55                                                           ` Erik Mouw
2006-07-14 17:16                                                       ` Mark Lord
2006-07-14 17:18                                                         ` Justin Piszcz
2006-07-14 17:39                                                           ` Mark Lord
2006-07-14 18:18                                                             ` Justin Piszcz
2006-07-14 20:02                                                             ` Mark Lord
2006-07-14 17:14                                                     ` Follow up? LibPATA code issues / 2.6.15.4 (found the opcode=0x35)! Mark Lord
2006-07-14 17:17                                                       ` Justin Piszcz
2006-07-14 17:37                                                         ` Mark Lord
2006-07-14 18:17                                                           ` Justin Piszcz
2006-03-01 19:00 LibPATA code issues / 2.6.15.4 Nicolas Mailhot
2006-03-01 19:22 ` Mark Lord
2006-03-01 23:12   ` Nicolas Mailhot
2006-03-01 23:31     ` Jeff Garzik
2006-03-02  1:19     ` Eric D. Mudama
2006-03-02  1:39       ` Eric D. Mudama

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=440083B4.3030307@rtr.ca \
    --to=lkml@rtr.ca \
    --cc=david@dgreaves.com \
    --cc=jgarzik@pobox.com \
    --cc=jpiszcz@lucidpixels.com \
    --cc=linux-ide@vger.kernel.org \
    --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;
as well as URLs for NNTP newsgroup(s).