aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-10-09 01:58:33 -0400
committerJeff Garzik <jeff@garzik.org>2007-10-12 14:55:46 -0400
commit9073868376ed5fa1f247327ccb2e6f766d5b7eed (patch)
treead79d7da02173e99c300988dfefbdf8fc1081088
parent94ff3d54080975686a3c41e73b8926030ee0c31f (diff)
libata: wrap schedule_timeout_uninterruptible() in loop
Tasks in uninterruptible sleep might be woken up by unrelated events and should check whether the condition it was waiting for has actually triggered. Wrap schedule_timeout_uninterruptible() in loop to achieve it. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/ata/libata-eh.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 866ac9d5530a..8aa61403303f 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2183,7 +2183,8 @@ int ata_eh_reset(struct ata_link *link, int classify,
2183 "(errno=%d), retrying in %u secs\n", 2183 "(errno=%d), retrying in %u secs\n",
2184 rc, (jiffies_to_msecs(delta) + 999) / 1000); 2184 rc, (jiffies_to_msecs(delta) + 999) / 1000);
2185 2185
2186 schedule_timeout_uninterruptible(delta); 2186 while (delta)
2187 delta = schedule_timeout_uninterruptible(delta);
2187 } 2188 }
2188 2189
2189 if (rc == -EPIPE || 2190 if (rc == -EPIPE ||