Re: LibPATA code issues / 2.6.15.4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Justin Piszcz wrote:
> Look at this:
> 
>> From smartctl, look at the correspondence:
> 199 UDMA_CRC_Error_Count    0x000a   200   253   000    Old_age   Always 
> -       4
> 
> [4301946.802000] ata4: translated ATA stat/err 0x51/04 to SCSI 
> SK/ASC/ASCQ 0xb/00/00
> [4301946.802000] ata4: status=0x51 { DriveReady SeekComplete Error }
> [4301946.802000] ata4: error=0x04 { DriveStatusError }
> [4302380.482000] ata4: translated ATA stat/err 0x51/04 to SCSI 
> SK/ASC/ASCQ 0xb/00/00
> [4302380.482000] ata4: status=0x51 { DriveReady SeekComplete Error }
> [4302380.482000] ata4: error=0x04 { DriveStatusError }
> [4302493.664000] ata4: no sense translation for status: 0x51
> [4302493.664000] ata4: translated ATA stat/err 0x51/00 to SCSI 
> SK/ASC/ASCQ 0xb/00/00
> [4302493.664000] ata4: status=0x51 { DriveReady SeekComplete Error }
> [4302863.673000] ata4: no sense translation for status: 0x51
> [4302863.673000] ata4: translated ATA stat/err 0x51/00 to SCSI 
> SK/ASC/ASCQ 0xb/00/00
> [4302863.673000] ata4: status=0x51 { DriveReady SeekComplete Error }
> 
> different drive, different cable, same controller, but second port
> 
> So that Stat/err = UDMA_CRC_Error_Count!

No, I don't think it is -- there's a bit in the drive status
for indicating CRC errors, and it is not showing up here.

I think it's still just libata sending some command that this
drive does not implement.  You really need to dump out the failed
ATA opcode.

I *think* this (uncompiled, untested) patch may do it for you on 2.6.16/17:

--- linux/drivers/scsi/libata-scsi.c.orig	2006-06-19 10:37:03.000000000 -0400
+++ linux/drivers/scsi/libata-scsi.c	2006-07-07 09:06:57.000000000 -0400
@@ -542,6 +542,7 @@
 	struct ata_taskfile *tf = &qc->tf;
 	unsigned char *sb = cmd->sense_buffer;
 	unsigned char *desc = sb + 8;
+	unsigned char ata_op = tf->command;
 
 	memset(sb, 0, SCSI_SENSE_BUFFERSIZE);
 
@@ -558,6 +559,7 @@
 	 * onto sense key, asc & ascq.
 	 */
 	if (tf->command & (ATA_BUSY | ATA_DF | ATA_ERR | ATA_DRQ)) {
+		printk(KERN_WARN "ata_gen_ata_desc_sense: failed ata_op=0x%02x\n", ata_op);
 		ata_to_sense_error(qc->ap->id, tf->command, tf->feature,
 				   &sb[1], &sb[2], &sb[3]);
 		sb[1] &= 0x0f;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux