qc_defer for sas_ata.c:sas_sata_ops?

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

 



I'm hitting the following warning:

BUG: warning at /opt/ft/src/ata/libata-core.c:6016/ata_qc_issue()
(Tainted: PF    )

Call Trace:
 <IRQ>  [<ffffffff880d7a12>] :libata:ata_qc_issue+0xfd/0x56a
 [<ffffffff880845cb>] :scsi_mod:scsi_done+0x0/0x18
 [<ffffffff880dcdfe>] :libata:ata_scsi_flush_xlat+0x0/0x2e
 [<ffffffff880dd7bb>] :libata:ata_scsi_translate+0x144/0x171
 [<ffffffff88109f87>] :libsas:sas_queuecommand+0xb6/0x2c1
 [<ffffffff880845cb>] :scsi_mod:scsi_done+0x0/0x18
 [<ffffffff8001c5ea>] __mod_timer+0xb0/0xbe
 [<ffffffff88084c74>] :scsi_mod:scsi_dispatch_cmd+0x26e/0x2ff
 [<ffffffff8808a290>] :scsi_mod:scsi_request_fn+0x2c1/0x390
 [<ffffffff8013874c>] __blk_put_request+0x2d/0x94
 [<ffffffff8808921e>] :scsi_mod:scsi_end_request+0xa5/0xcb
 [<ffffffff88089392>] :scsi_mod:scsi_io_completion+0x14e/0x324
 [<ffffffff880b542a>] :sd_mod:sd_rw_intr+0x212/0x23f
 [<ffffffff88089627>] :scsi_mod:scsi_device_unbusy+0x67/0x81
 [<ffffffff80037869>] blk_done_softirq+0x5f/0x6d
 [<ffffffff80011ed2>] __do_softirq+0x5e/0xd6
 [<ffffffff8007815f>] end_level_ioapic_vector+0x9/0x16
 [<ffffffff8005e2fc>] call_softirq+0x1c/0x28
 [<ffffffff8006c571>] do_softirq+0x2c/0x85
 [<ffffffff8006c3f9>] do_IRQ+0xec/0xf5
 [<ffffffff8006ad3b>] default_idle+0x0/0x50
 [<ffffffff8005d615>] ret_from_intr+0x0/0xa
 <EOI>  [<ffffffff8006ad64>] default_idle+0x29/0x50
 [<ffffffff80048b1d>] cpu_idle+0x95/0xb8
 [<ffffffff803d9801>] start_kernel+0x220/0x225
 [<ffffffff803d922f>] _sinittext+0x22f/0x236

This is:

void ata_qc_issue(struct ata_queued_cmd *qc)
{
	struct ata_port *ap = qc->ap;
	struct ata_link *link = qc->dev->link;

	/* Make sure only one non-NCQ command is outstanding.  The
	 * check is skipped for old EH because it reuses active qc to
	 * request ATAPI sense.
	 */
	WARN_ON(ap->ops->error_handler &&
ata_tag_valid(link->active_tag));

	if (qc->tf.protocol == ATA_PROT_NCQ) {
		WARN_ON(link->sactive & (1 << qc->tag));

		if (!link->sactive)
			ap->nr_active_links++;
		link->sactive |= 1 << qc->tag;
	} else {
		WARN_ON(link->sactive);  <-------------


Happens every once in a while, seems to be on a synchronize cache
command (which uses ATA_PROT_NODATA). I haven't noticed anything bad
happening as a result of this, just the warning.

This is with an Adaptec AIC-9410W HBA, SATA disks using libsas/libata.
I'm running a 2.6.18 kernel from RHEL 5 update 2, plus a few
aic94xx/libsas bug fixes pulled from upstream.

Based on the results of some googling, it seemed that adding ".qc_defer
= ata_std_qc_defer" to sas_ata.c's sas_sata_ops might fix the problem,
and indeed it seems to have done so.

Anything wrong with making this change? I don't see the change upstream,
but I also don't see reports of anyone else hitting this warning (so
maybe I've done something to cause this myself).

Thanks for any help/advice,

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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux