Torsten Kaiser wrote:
On 10/13/07, Jeff Garzik <[EMAIL PROTECTED]> wrote:
Torsten Kaiser wrote:
On 10/12/07, Andrew Morton <[EMAIL PROTECTED]> wrote:
On Fri, 12 Oct 2007 10:31:42 +0200 "Torsten Kaiser" <[EMAIL PROTECTED]> wrote:
Oct 12 10:23:03 treogen smartd[6091]: Device: /dev/sdc, not found in
smartd database.
hm.
Oct 12 10:23:03 treogen [ 105.990000] WARNING: at
drivers/ata/libata-core.c:5752 ata_qc_issue()
Let's cc linux-ide.
Oct 12 10:23:03 treogen [ 105.990000]
Oct 12 10:23:03 treogen [ 105.990000] Call Trace:
Oct 12 10:23:03 treogen [ 105.990000] [<ffffffff804442ef>]
ata_qc_issue+0x47f/0x540
Oct 12 10:23:03 treogen [ 105.990000] [<ffffffff80432e60>] scsi_done+0x0/0x20
Oct 12 10:23:03 treogen [ 105.990000] [<ffffffff80449c80>]
ata_scsi_flush_xlat+0x0/0x30
Oct 13 07:46:48 treogen [ 99.850000]
Oct 13 07:46:48 treogen [ 99.850000] ata3: EH in SWNCQ
mode,QC:qc_active 0x3 sactive 0x1
Oct 13 07:46:48 treogen [ 99.850000] ata3: SWNCQ:qc_active 0x1
defer_bits 0x0 last_issue_tag 0x0
The WARNING indicates that there is a SWNCQ bug in sata_nv. Given that
the problem appears when SYNCHRONIZE CACHE is being issued, I would
I can't follow you on SYNCHRONIZE CACHE.
The only command written to the syslog in the errors where
0x60==ATA_CMD_FPDMA_READ and 0xB0 (which is not in
include/linux/ata.h, but ATA-6 says that this is SMART related. That
makes sense, as smartd is failing).
In the traceback you have "ata_scsi_flush_xlat", which is the function
that translates a SCSI sync-cache command into an ATA flush-cache command.
The "WARNING: at drivers/ata/libata-core.c:5752 ata_qc_issue()" also
guides us to the code comment
/* 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.
*/
which is a check related to NCQ->off and off->NCQ edge cases.
So those are the two bits of information I found interesting.
guess that sata_nv is not properly handling non-queued commands.
But that still seems correct, as I would not expect that SMART
commands get queued. (Thats just a guess, as I did not try to find the
code that does this distinction)
This is a patch from libata-dev.git#nv-swncq (via #ALL).
Comparing sata_nv.c from 2.6.23-rc8-mm1 and 2.6.23-mm1 I see two
changes, that look suspicious:
http://git.kernel.org/?p=linux/kernel/git/jgarzik/libata-dev.git;a=commitdiff;h=31cc23b34913bc173680bdc87af79e551bf8cc0d
The comment says: "ahci and sata_sil24 are converted to use ata_std_qc_defer()."
But the patch also adds ".qc_defer = ata_std_qc_defer," to sata_nv.c
The second change is the removal of the 'lock' spinlock from sata_nv.c
that was used in nv_swncq_qc_issue and nv_swncq_host_interrupt.
Should I try to revert one or both of these changes?
If you are git-capable, IMO the next steps in problem elimination should be
* download latest linux-2.6.git (currently
752097cec53eea111d087c545179b421e2bde98a)
* build and test linux-2.6.git, to establish a new baseline
* download latest libata-dev.git#nv-swncq (currently
3cb664c2d319a4fde5028c3c5dab6221fe70bd2d)
* build and test, with sata_nv module option swncq=0
* build and test, with sata_nv module option swncq=1
That will get -mm out of the picture, use the same baseline kernel for
all three tests (nv-swncq is based off of
752097cec53eea111d087c545179b421e2bde98a) and narrow things down to the
precise changes that went upstream (or are on the 'nv-swncq' branch,
waiting to go upstream).
My gut feeling is that there is a lingering bug in sata_nv SWNCQ somewhere.
Jeff
-
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/