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 -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html