From: Artem Bokhan <aptem@ngs.ru>
To: Tejun Heo <htejun@gmail.com>
Cc: Mark Lord <liml@rtr.ca>, linux-ide@vger.kernel.org
Subject: Re: bad sectors, suspicious behaviour
Date: Wed, 13 Aug 2008 17:47:56 +0700 [thread overview]
Message-ID: <48A2BBDC.2090201@ngs.ru> (raw)
In-Reply-To: <48A29E14.3090908@gmail.com>
patch did not help, but I found additional necessary condition (I
didn't take it into account before system reboot):
to reproduce the problem from scratch it is necessary to
echo 1 >
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:02.0/host4/target4:0:0/4:0:0:0/timeout
returning the value to 30 do not help.
With default 30 secs the problem can not be reproduced
Tejun Heo пишет:
> Hello, Mark, Artem.
>
> Mark Lord wrote:
>
>> Mmm.. since it happens only once in a while, and not on every EH action,
>> one might assume that it's a race of some kind.
>>
>> One possibility, might be due to .qc_defer.
>>
>> The stock ata_qc_defer relies heavily on ata_tag_valid(),
>> which matches what the above WARN_ON uses.
>>
>> But sata_mv doesn't use ata_tag_valid, because it wants to know
>> about the entire port and not just a single individual link on the port.
>> So instead, it uses ap->nr_active_links for the test.
>>
>> My guess is that these two items are not kept in sync during EH.
>>
>
> The culprit is mv_qc_defer(). If the controller is in host queueing
> mode, it allows multiple non-NCQ commands to be queued, which
> currently isn't allowed by the current libata core. Allowing it
> shouldn't be too difficult but it would incur some core layer changes.
> For the time being, can you please test whether the following patch
> fixes the problem?
>
> diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
> index ad169ff..80c655f 100644
> --- a/drivers/ata/sata_mv.c
> +++ b/drivers/ata/sata_mv.c
> @@ -1134,30 +1134,16 @@ static int mv_qc_defer(struct ata_queued_cmd *qc)
> if (ap->nr_active_links == 0)
> return 0;
>
> - if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) {
> - /*
> - * The port is operating in host queuing mode (EDMA).
> - * It can accomodate a new qc if the qc protocol
> - * is compatible with the current host queue mode.
> - */
> - if (pp->pp_flags & MV_PP_FLAG_NCQ_EN) {
> - /*
> - * The host queue (EDMA) is in NCQ mode.
> - * If the new qc is also an NCQ command,
> - * then allow the new qc.
> - */
> - if (qc->tf.protocol == ATA_PROT_NCQ)
> - return 0;
> - } else {
> - /*
> - * The host queue (EDMA) is in non-NCQ, DMA mode.
> - * If the new qc is also a non-NCQ, DMA command,
> - * then allow the new qc.
> - */
> - if (qc->tf.protocol == ATA_PROT_DMA)
> - return 0;
> - }
> - }
> + /*
> + * The port is operating in host queuing mode (EDMA) with NCQ
> + * enabled, allow multiple NCQ commands. EDMA also allows
> + * queueing multiple DMA commands but libata core currently
> + * doesn't allow it.
> + */
> + if ((pp->pp_flags & MV_PP_FLAG_EDMA_EN) &&
> + (pp->pp_flags & MV_PP_FLAG_NCQ_EN) && ata_is_ncq(qc->tf.protocol))
> + return 0;
> +
> return ATA_DEFER_PORT;
> }
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ide" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2008-08-13 10:47 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-08 10:02 bad sectors, suspicious behaviour Artem Bokhan
2008-08-08 13:34 ` Mark Lord
2008-08-08 13:50 ` Mark Lord
2008-08-08 14:14 ` Mark Lord
2008-08-11 11:12 ` Bokhan Artem
2008-08-13 8:40 ` Tejun Heo
2008-08-13 10:47 ` Artem Bokhan [this message]
2008-08-13 10:50 ` Tejun Heo
2008-08-13 11:19 ` Artem Bokhan
2008-08-13 11:24 ` [PATCH #upstream-fixes] sata_mv: don't issue two DMA commands concurrently Tejun Heo
2008-08-13 11:37 ` Artem Bokhan
2008-08-13 11:52 ` Tejun Heo
2008-08-13 12:05 ` Artem Bokhan
2008-08-13 12:21 ` Tejun Heo
2008-08-13 12:32 ` Artem Bokhan
2008-08-13 16:17 ` Mark Lord
2008-08-13 17:37 ` Bokhan Artem
2008-08-13 19:58 ` Bokhan Artem
2008-08-13 23:36 ` Mark Lord
2008-08-14 7:42 ` Artem Bokhan
2008-08-14 12:40 ` Mark Lord
2008-08-14 12:58 ` Artem Bokhan
2008-08-14 13:17 ` Artem Bokhan
2008-08-14 19:49 ` Mark Lord
2008-08-15 5:35 ` Artem Bokhan
2008-08-15 12:27 ` Mark Lord
2008-08-13 16:57 ` Greg Freemyer
2008-08-13 17:29 ` Bokhan Artem
2008-08-13 17:50 ` Greg Freemyer
2008-08-13 18:04 ` Bokhan Artem
2008-08-13 18:13 ` Greg Freemyer
2008-08-13 11:47 ` Artem Bokhan
2008-08-13 11:52 ` Tejun Heo
2008-08-22 16:28 ` Grant Grundler
2008-08-13 16:10 ` Mark Lord
2008-08-22 6:11 ` Jeff Garzik
2008-08-22 17:01 ` Martin Michlmayr
2008-08-26 13:54 ` Mark Lord
2008-08-29 7:12 ` Martin Michlmayr
2008-08-26 1:24 ` Gwendal Grignou
2008-08-26 7:04 ` Tejun Heo
2008-08-26 13:58 ` Mark Lord
-- strict thread matches above, loose matches on Subject: below --
2008-08-08 2:57 bad sectors, suspicious behaviour Artem Bokhan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48A2BBDC.2090201@ngs.ru \
--to=aptem@ngs.ru \
--cc=htejun@gmail.com \
--cc=liml@rtr.ca \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).