linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: Tim Blechmann <tim@klingt.org>
Cc: linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org
Subject: Re: 2.6.31-rc5 regression: hd don't show up
Date: Wed, 16 Sep 2009 21:00:10 +0900	[thread overview]
Message-ID: <4AB0D34A.2010502@kernel.org> (raw)
In-Reply-To: <4AB09562.3010501@klingt.org>

[-- Attachment #1: Type: text/plain, Size: 459 bytes --]

Tim Blechmann wrote:
>> Can you please try the attached patch and report the result?  The bug
>> shouldn't happen now and for cases where it would have happened,
>> libata will report "link online but device misclassified" and retry.
> 
> this patch cannot be applied onto stable-2.6.31/master ... e.g. the
> first chunk is already in there ....

Eh... the first chunk was for the current devel branch.  Here's a
version without that one.

Thanks.

-- 
tejun

[-- Attachment #2: fix-link-onoffline-handling.patch --]
[-- Type: text/x-patch, Size: 3348 bytes --]

---
 drivers/ata/libata-eh.c |   50 ++++++++++++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 18 deletions(-)

Index: tree0/drivers/ata/libata-eh.c
===================================================================
--- tree0.orig/drivers/ata/libata-eh.c
+++ tree0/drivers/ata/libata-eh.c
@@ -2541,14 +2541,14 @@ int ata_eh_reset(struct ata_link *link,
 		dev->pio_mode = XFER_PIO_0;
 		dev->flags &= ~ATA_DFLAG_SLEEPING;
 
-		if (!ata_phys_link_offline(ata_dev_phys_link(dev))) {
-			/* apply class override */
-			if (lflags & ATA_LFLAG_ASSUME_ATA)
-				classes[dev->devno] = ATA_DEV_ATA;
-			else if (lflags & ATA_LFLAG_ASSUME_SEMB)
-				classes[dev->devno] = ATA_DEV_SEMB_UNSUP;
-		} else
-			classes[dev->devno] = ATA_DEV_NONE;
+		if (ata_phys_link_offline(ata_dev_phys_link(dev)))
+			continue;
+
+		/* apply class override */
+		if (lflags & ATA_LFLAG_ASSUME_ATA)
+			classes[dev->devno] = ATA_DEV_ATA;
+		else if (lflags & ATA_LFLAG_ASSUME_SEMB)
+			classes[dev->devno] = ATA_DEV_SEMB_UNSUP;
 	}
 
 	/* record current link speed */
@@ -2581,34 +2581,48 @@ int ata_eh_reset(struct ata_link *link,
 		slave->eh_info.serror = 0;
 	spin_unlock_irqrestore(link->ap->lock, flags);
 
-	/* Make sure onlineness and classification result correspond.
+	/*
+	 * Make sure onlineness and classification result correspond.
 	 * Hotplug could have happened during reset and some
 	 * controllers fail to wait while a drive is spinning up after
 	 * being hotplugged causing misdetection.  By cross checking
-	 * link onlineness and classification result, those conditions
-	 * can be reliably detected and retried.
+	 * link on/offlineness and classification result, those
+	 * conditions can be reliably detected and retried.
 	 */
 	nr_unknown = 0;
 	ata_for_each_dev(dev, link, ALL) {
-		/* convert all ATA_DEV_UNKNOWN to ATA_DEV_NONE */
-		if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
-			classes[dev->devno] = ATA_DEV_NONE;
-			if (ata_phys_link_online(ata_dev_phys_link(dev)))
+		if (ata_phys_link_online(ata_dev_phys_link(dev))) {
+			if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
+				ata_dev_printk(dev, KERN_DEBUG, "link online "
+					       "but device misclassifed\n");
+				classes[dev->devno] = ATA_DEV_NONE;
 				nr_unknown++;
+			}
+		} else if (ata_phys_link_offline(ata_dev_phys_link(dev))) {
+			if (ata_class_enabled(classes[dev->devno]))
+				ata_dev_printk(dev, KERN_DEBUG, "link offline, "
+					       "clearing class %d to NONE\n",
+					       classes[dev->devno]);
+			classes[dev->devno] = ATA_DEV_NONE;
+		} else if (classes[dev->devno] == ATA_DEV_UNKNOWN) {
+			ata_dev_printk(dev, KERN_DEBUG, "link status unknown, "
+				       "clearing UNKNOWN to NONE\n");
+			classes[dev->devno] = ATA_DEV_NONE;
 		}
 	}
 
 	if (classify && nr_unknown) {
 		if (try < max_tries) {
 			ata_link_printk(link, KERN_WARNING, "link online but "
-				       "device misclassified, retrying\n");
+					"%d devices misclassified, retrying\n",
+					nr_unknown);
 			failed_link = link;
 			rc = -EAGAIN;
 			goto fail;
 		}
 		ata_link_printk(link, KERN_WARNING,
-			       "link online but device misclassified, "
-			       "device detection might fail\n");
+				"link online but %d devices misclassified, "
+				"device detection might fail\n", nr_unknown);
 	}
 
 	/* reset successful, schedule revalidation */

  reply	other threads:[~2009-09-16 12:00 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-14  8:26 2.6.31-rc5 regression: hd don't show up Tim Blechmann
2009-08-14  9:17 ` Tejun Heo
2009-08-14 12:34   ` Tim Blechmann
2009-08-16  2:54     ` Tejun Heo
2009-08-16 10:05       ` Tim Blechmann
2009-08-27  8:38         ` Tejun Heo
2009-08-27 10:21           ` Tim Blechmann
2009-08-27 11:35             ` Tejun Heo
2009-08-28 11:04               ` Tim Blechmann
2009-08-31  7:39                 ` Tejun Heo
2009-09-01 23:34                   ` Tim Blechmann
2009-09-02  2:22                     ` Tejun Heo
2009-09-02  9:12                       ` Tim Blechmann
2009-09-03 14:07                         ` Tejun Heo
2009-09-04 22:06                           ` Tim Blechmann
2009-09-04 22:33                             ` Maxim Levitsky
2009-09-05  0:12                             ` Tejun Heo
2009-09-08 20:58                               ` Tim Blechmann
2009-09-16  2:19                                 ` Tejun Heo
2009-09-16  5:39                                   ` Tejun Heo
2009-09-16  7:36                                     ` Tim Blechmann
2009-09-16 12:00                                       ` Tejun Heo [this message]
2009-09-25  4:20                                         ` Tejun Heo
2009-09-25  7:46                                           ` Tim Blechmann
2009-09-25  7:53                                             ` Tejun Heo
2009-09-25 11:47                                               ` Tim Blechmann
2009-09-25 13:21                                                 ` Tejun Heo
2009-10-02  5:20                                                   ` Tejun Heo
2009-10-02  7:30                                                     ` Tim Blechmann
2009-10-02  8:59                                                       ` Tejun Heo
2009-10-05  9:59                                                         ` Tim Blechmann
2009-10-06  7:30                                                           ` Tejun Heo

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=4AB0D34A.2010502@kernel.org \
    --to=tj@kernel.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tim@klingt.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).