libata: Fix early use of port printk. (Was Re: ata4294967295: failed to start port...
authorAlan Cox <alan@lxorguk.ukuu.org.uk>
Fri, 30 Nov 2007 15:23:16 +0000 (15:23 +0000)
committerJeff Garzik <jeff@garzik.org>
Sat, 1 Dec 2007 22:44:10 +0000 (17:44 -0500)
On Fri, 30 Nov 2007 14:34:11 +0200 (EET)
Meelis Roos <mroos@linux.ee> wrote:

> > Can you stick a stack trace in at that point ? That would help diagnose
> > it a great deal quicker.
>
> Finally done - found out hard way that BUG() is too bad and
> dump_st5ack() suits me better.

Thanks. This should fix the real cause, and also allow for port start to
fail politely with -ENODEV.

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-core.c

index 53d11017a5c3b4152161d1de6c6310b03336bb90..b514a80f13708168df662814adceb2000002fbad 100644 (file)
@@ -6967,12 +6967,11 @@ int ata_host_start(struct ata_host *host)
                if (ap->ops->port_start) {
                        rc = ap->ops->port_start(ap);
                        if (rc) {
-                               ata_port_printk(ap, KERN_ERR, "failed to "
-                                               "start port (errno=%d)\n", rc);
+                               if (rc != -ENODEV)
+                                       dev_printk(KERN_ERR, host->dev, "failed to start port %d (errno=%d)\n", i, rc);
                                goto err_out;
                        }
                }
-
                ata_eh_freeze_port(ap);
        }