linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHSET #upstream] libata: improve timeout handling for EH commands
@ 2008-05-19 17:17 Tejun Heo
  2008-05-19 17:17 ` [PATCH 1/5] libata: kill unused constants Tejun Heo
                   ` (6 more replies)
  0 siblings, 7 replies; 20+ messages in thread
From: Tejun Heo @ 2008-05-19 17:17 UTC (permalink / raw)
  To: jeff, linux-ide; +Cc: liml

Hello,

[S]ATA has lots of legacy and not in a too healthy way.  The desparate
efforts to keep everything compatible made mundane things quite
challenging.  Probing definitely is one of them.  We now span from
ancient CF devices to port multipliers and quirky ones are easy to
find all along the spectrum.

For example, according to the spec reset protocol and the actual
implementations, there's no defined way to wait for the initial D2H
Reg FIS after hardresetting a fan-out port.  The problem is that the
D2H Reg FIS can arrive during later steps of probing is in progress
and a rogue FIS at the right time can easily make the controller fail
or time out pending operations.

Another problem of the long spectrum is that we can't choose the one
correct value as timeout for operations.  A timeout value which can
cover all the devices is too long and makes EH painfully slow when
something goes wrong.  Choosing shorter timeout means the ancient and
weirdos won't work.

So, we have to resort to smart self adjusting timeouts.  Early
quickies to detect transient failures quickly and later long ones to
cover odd devices.  Deadline driven ata_eh_reset() was a step in that
direction and this patchset, in addition to other timeout related
improvements, applies it to the rest of EH commands.

This patchset contains the following patches.

 01-libata-kill-unused-constants.patch
 02-libata-consistently-use-msecs-for-time-durations.patch
 03-libata-improve-EH-retry-delay-handling.patch
 04-libata-use-ULONG_MAX-to-terminate-reset-timeout-tab.patch
 05-libata-improve-EH-internal-command-timeout-handling.patch

#01, #02 and #04 are preparations.  #02 makes liata use msecs
consistently for time durations.  #03 makes inter-try or inter-reset
delays smarter and allows libata EH to delay less between tries
without sacrificing robustness.  #05 implements per command class
stepped timeouts for EH commands, so that the first IDENTIFY try fails
quickly but later on the device can take full 30secs to think about it
while restricting maximum timeout for SET_FEATURES to 10secs.

This patchset makes whole EH behave much more swiftly and timeout
cases bearable.  :-)

This patchset is on top of

 #upstream-fixes (005b1f7495e812b99b73de5adbc73afd7a1cbcaf)
 + [1] hotplug-fixes patchset

and available as git tree

 http://git.kernel.org/?p=linux/kernel/git/tj/libata-dev.git;a=shortlog;h=improve-timeout
 git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata-dev.git improve-timeout

 drivers/ata/libata-core.c |   56 +++++++-----
 drivers/ata/libata-eh.c   |  200 +++++++++++++++++++++++++++++++++++++------
 drivers/ata/libata-pmp.c  |   13 --
 drivers/ata/libata-sff.c  |   15 +--
 drivers/ata/libata.h      |    2 
 drivers/ata/pata_bf54x.c  |    6 -
 drivers/ata/pata_scc.c    |    2 
 include/linux/libata.h    |   37 +++++---
 8 files changed, 234 insertions(+), 97 deletions(-)

Thanks.

--
tejun

[1] http://thread.gmane.org/gmane.linux.ide/31572

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2008-11-11  2:27 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-19 17:17 [PATCHSET #upstream] libata: improve timeout handling for EH commands Tejun Heo
2008-05-19 17:17 ` [PATCH 1/5] libata: kill unused constants Tejun Heo
2008-06-04 10:29   ` Jeff Garzik
2008-05-19 17:17 ` [PATCH 2/5] libata: consistently use msecs for time durations Tejun Heo
2008-05-19 22:35   ` Elias Oltmanns
2008-05-20  4:03     ` Tejun Heo
2008-06-13  6:55   ` Jeff Garzik
2008-05-19 17:17 ` [PATCH 3/5] libata: improve EH retry delay handling Tejun Heo
2008-05-19 18:33   ` Alan Cox
2008-05-20  4:02     ` Tejun Heo
2008-05-19 17:17 ` [PATCH 4/5] libata: use ULONG_MAX to terminate reset timeout table Tejun Heo
2008-05-19 17:17 ` [PATCH 5/5] libata: improve EH internal command timeout handling Tejun Heo
2008-05-19 18:35   ` Alan Cox
2008-05-19 18:51     ` Jeff Garzik
2008-05-20  4:05     ` Tejun Heo
2008-05-29  1:59 ` [PATCHSET #upstream] libata: improve timeout handling for EH commands Tejun Heo
2008-06-03 18:06 ` Jeff Garzik
2008-06-04  5:02   ` Tejun Heo
2008-11-10 16:32     ` saeed bishara
2008-11-11  2:27       ` Tejun Heo

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).