Re: LibPATA code issues / 2.6.15.4

From: Justin Piszcz
Date: Tue Feb 14 2006 - 13:03:59 EST


Thanks, I will reboot later tonight and see what type of error codes it gives me.

Against 2.6.15.4:

# patch -p1 < /tmp/a
patching file drivers/scsi/libata-scsi.c
Hunk #1 succeeded at 404 (offset -16 lines).
Hunk #2 succeeded at 414 (offset -16 lines).
Hunk #3 succeeded at 493 (offset -16 lines).
Hunk #4 succeeded at 505 (offset -16 lines).
Hunk #5 succeeded at 547 (offset -16 lines).
Hunk #6 succeeded at 622 (offset -16 lines).
#

On Tue, 14 Feb 2006, Mark Lord wrote:

On Tuesday 14 February 2006 12:12, Justin Piszcz wrote:
I would like to try the patch too, if available.

Something like this: (for 2.6.16-rc3-git2, but should be okay on 2.6.15 also).

Untested: include the original SCSI opcode in printk's for libata SCSI errors,
to help understand where the errors are coming from.

Signed-Off-By: Mark Lord <mlord@xxxxxxxxx>

--- linux/drivers/scsi/libata-scsi.c.orig 2006-02-12 19:27:25.000000000 -0500
+++ linux/drivers/scsi/libata-scsi.c 2006-02-14 12:54:17.000000000 -0500
@@ -420,6 +420,7 @@
* @sk: the sense key we'll fill out
* @asc: the additional sense code we'll fill out
* @ascq: the additional sense code qualifier we'll fill out
+ * @opcode: the original SCSI command opcode byte
*
* Converts an ATA error into a SCSI error. Fill out pointers to
* SK, ASC, and ASCQ bytes for later use in fixed or descriptor
@@ -429,7 +430,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 *ascq, u8 opcode)
{
int i;

@@ -508,8 +509,8 @@
}
}
/* No error? Undecoded? */
- printk(KERN_WARNING "ata%u: no sense translation for status: 0x%02x\n",
- id, drv_stat);
+ printk(KERN_WARNING "ata%u: no sense translation for op=0x%02x status: 0x%02x\n",
+ id, opcode, 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
@@ -520,8 +521,8 @@
*ascq = 0x04; /* "auto-reallocation failed" */

translate_done:
- printk(KERN_ERR "ata%u: translated ATA stat/err 0x%02x/%02x to "
- "SCSI SK/ASC/ASCQ 0x%x/%02x/%02x\n", id, drv_stat, drv_err,
+ printk(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,
*sk, *asc, *ascq);
return;
}
@@ -562,7 +563,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]);
+ &sb[1], &sb[2], &sb[3], cmd->cmnd[0]);
sb[1] &= 0x0f;
}

@@ -637,7 +638,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]);
+ &sb[2], &sb[12], &sb[13], cmd->cmnd[0]);
sb[2] &= 0x0f;
}


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/