From c787dcd9d8deab5c31ab9db821cadddd0e017da3 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Wed, 14 Oct 2009 11:18:28 +0900 Subject: [PATCH] --- yaml --- r: 167642 b: refs/heads/master c: 6489e3262e6b188a1a009b65e8a94b7aa17645b7 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/ata/sata_nv.c | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 9eb48f722724..cac72132b63e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5deab536654f95345ea11e8ec6ed5c778df348b5 +refs/heads/master: 6489e3262e6b188a1a009b65e8a94b7aa17645b7 diff --git a/trunk/drivers/ata/sata_nv.c b/trunk/drivers/ata/sata_nv.c index 86a40582999c..1eb4e020eb5c 100644 --- a/trunk/drivers/ata/sata_nv.c +++ b/trunk/drivers/ata/sata_nv.c @@ -1594,9 +1594,21 @@ static int nv_hardreset(struct ata_link *link, unsigned int *class, !ata_dev_enabled(link->device)) sata_link_hardreset(link, sata_deb_timing_hotplug, deadline, NULL, NULL); - else if (!(ehc->i.flags & ATA_EHI_QUIET)) - ata_link_printk(link, KERN_INFO, - "nv: skipping hardreset on occupied port\n"); + else { + const unsigned long *timing = sata_ehc_deb_timing(ehc); + int rc; + + if (!(ehc->i.flags & ATA_EHI_QUIET)) + ata_link_printk(link, KERN_INFO, "nv: skipping " + "hardreset on occupied port\n"); + + /* make sure the link is online */ + rc = sata_link_resume(link, timing, deadline); + /* whine about phy resume failure but proceed */ + if (rc && rc != -EOPNOTSUPP) + ata_link_printk(link, KERN_WARNING, "failed to resume " + "link (errno=%d)\n", rc); + } /* device signature acquisition is unreliable */ return -EAGAIN;