Re: sata_mv BUG: at drivers/ata/sata_mv.c:1236 mv_qc_issue()

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

 



Tomasz Chmielewski wrote:
..
The error I mentioned before - BUG: at drivers/ata/sata_mv.c:1236 mv_qc_issue() - happened on /dev/sda drive.

As it appears, my /dev/sdb drive just dies (has multiple badblocks). It causes similar errors when I tried to dd if=/dev/ero of=/dev/sdb.

It triggered two bugs:

BUG: at drivers/ata/sata_mv.c:657 mv_start_dma()

Heh.. that one is just the driver being way too clever for itself.
This fix (below) should take care of it.

BUG: at drivers/ata/sata_mv.c:1201 mv_qc_issue()

That one should be harmless, and is likely a side-effect of
not completely resetting the engine & variables after an error.

This whole driver needs a lot of TLC, something I just might
be into doing shortly.    Meanwhile:


This patch removes some unhelpful paranoia from sata_mv.c,
now choosing to actually *recover* rather than simply complain.

Signed-off-by:  Mark Lord <mlord@xxxxxxxxx>
---
--- linux/drivers/ata/sata_mv.c.orig	2007-04-26 12:02:46.000000000 -0400
+++ linux/drivers/ata/sata_mv.c	2007-05-23 09:18:42.000000000 -0400
@@ -650,11 +650,8 @@
 */
static void mv_start_dma(void __iomem *base, struct mv_port_priv *pp)
{
-	if (!(MV_PP_FLAG_EDMA_EN & pp->pp_flags)) {
-		writelfl(EDMA_EN, base + EDMA_CMD_OFS);
-		pp->pp_flags |= MV_PP_FLAG_EDMA_EN;
-	}
-	WARN_ON(!(EDMA_EN & readl(base + EDMA_CMD_OFS)));
+	writelfl(EDMA_EN, base + EDMA_CMD_OFS);
+	pp->pp_flags |= MV_PP_FLAG_EDMA_EN;
}

/**
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux