hey Martin, Can you verify that this problem is reproducible with: http://kernel-archive.buildserver.net/debian-kernel/pool/main/l/linux-2.6/linux-image-2.6.18-4-amd64_2.6.18-9~snapshot.8189_amd64.deb
And that it is not reproducible with: http://www.dannf.org/bugs/391929/linux-image-2.6.18-4-amd64_2.6.18-9~snapshot.8189+wcache_amd64.deb The only difference between the two is the addition of the following patch, which is a fairly simple backport of the changeset identified by Tejun. From: Tejun Heo <[EMAIL PROTECTED]> Date: Wed, 22 Nov 2006 03:39:43 +0000 (+0900) Subject: [PATCH] libata: don't schedule EH on wcache on/off if old EH X-Git-Tag: v2.6.19^0~5^2~2 X-Git-Url: http://www.kernel.org/git/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=c31f571d9f42fa2e89148811730fe3dc64943a6e [PATCH] libata: don't schedule EH on wcache on/off if old EH Do not schedule EH for revalidation on wcache on/off if old EH. Old EH cannot handle it and will result in WARN_ON()'s and oops. This closes bug #7412. Signed-off-by: Tejun Heo <[EMAIL PROTECTED]> Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]> --- Backported to Debian's 2.6.18 by dann frazier <[EMAIL PROTECTED]> diff -urpN linux-source-2.6.18.orig/drivers/scsi/libata-scsi.c linux-source-2.6.18/drivers/scsi/libata-scsi.c --- linux-source-2.6.18.orig/drivers/scsi/libata-scsi.c 2006-09-19 21:42:06.000000000 -0600 +++ linux-source-2.6.18/drivers/scsi/libata-scsi.c 2007-01-16 08:42:06.000000000 -0700 @@ -1409,6 +1409,7 @@ nothing_to_do: static void ata_scsi_qc_complete(struct ata_queued_cmd *qc) { + struct ata_port *ap = qc->ap; struct scsi_cmnd *cmd = qc->scsicmd; u8 *cdb = cmd->cmnd; int need_sense = (qc->err_mask != 0); @@ -1417,11 +1418,12 @@ static void ata_scsi_qc_complete(struct * schedule EH_REVALIDATE operation to update the IDENTIFY DEVICE * cache */ - if (!need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) && + if (ap->ops->error_handler && + !need_sense && (qc->tf.command == ATA_CMD_SET_FEATURES) && ((qc->tf.feature == SETFEATURES_WC_ON) || (qc->tf.feature == SETFEATURES_WC_OFF))) { - qc->ap->eh_info.action |= ATA_EH_REVALIDATE; - ata_port_schedule_eh(qc->ap); + ap->eh_info.action |= ATA_EH_REVALIDATE; + ata_port_schedule_eh(ap); } /* For ATA pass thru (SAT) commands, generate a sense block if @@ -1448,8 +1450,8 @@ static void ata_scsi_qc_complete(struct } } - if (need_sense && !qc->ap->ops->error_handler) - ata_dump_status(qc->ap->id, &qc->result_tf); + if (need_sense && !ap->ops->error_handler) + ata_dump_status(ap->id, &qc->result_tf); qc->scsidone(cmd); -- dann frazier -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

