diff mbox

[libsas,v10,6/9] libsas: use ->lldd_I_T_nexus_reset for ->eh_bus_reset_handler

Message ID 20120311043927.27797.43676.stgit@dwillia2-linux.jf.intel.com
State Not Applicable
Delegated to: David Miller
Headers show

Commit Message

Dan Williams March 11, 2012, 4:39 a.m. UTC
sas_eh_bus_reset_handler() amounts to sas_phy_reset() without
notification of the reset to the lldd.  If this is triggered from
eh-cmnd recovery there may be sas_tasks for the lldd to terminate, so
->lldd_I_T_nexus_reset is warranted.

Cc: Xiangliang Yu <yuxiangl@marvell.com>
Cc: Luben Tuikov <ltuikov@yahoo.com>
Cc: Jack Wang <jack_wang@usish.com>
Reviewed-by: Jacek Danecki <jacek.danecki@intel.com>
[jacek: modify pm8001_I_T_nexus_reset to return -ENODEV]
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 drivers/scsi/libsas/sas_scsi_host.c |   19 ++++++++-----------
 drivers/scsi/pm8001/pm8001_sas.c    |    3 ++-
 2 files changed, 10 insertions(+), 12 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Jack Wang March 11, 2012, 5:37 a.m. UTC | #1
TG9va3MgT0sgdG8gbWUuDQpUaGFua3MuDQpBY2tlZC1ieTogSmFjayBXYW5nIDxqYWNrX3dhbmdA
dXNpc2guY29tPg0KDQoNCi0tLS0tLS0tLS0tLS0tDQpqYWNrX3dhbmcNCj5zYXNfZWhfYnVzX3Jl
c2V0X2hhbmRsZXIoKSBhbW91bnRzIHRvIHNhc19waHlfcmVzZXQoKSB3aXRob3V0DQo+bm90aWZp
Y2F0aW9uIG9mIHRoZSByZXNldCB0byB0aGUgbGxkZC4gIElmIHRoaXMgaXMgdHJpZ2dlcmVkIGZy
b20NCj5laC1jbW5kIHJlY292ZXJ5IHRoZXJlIG1heSBiZSBzYXNfdGFza3MgZm9yIHRoZSBsbGRk
IHRvIHRlcm1pbmF0ZSwgc28NCj4tPmxsZGRfSV9UX25leHVzX3Jlc2V0IGlzIHdhcnJhbnRlZC4N
Cj4NCj5DYzogWGlhbmdsaWFuZyBZdSA8eXV4aWFuZ2xAbWFydmVsbC5jb20+DQo+Q2M6IEx1YmVu
IFR1aWtvdiA8bHR1aWtvdkB5YWhvby5jb20+DQo+Q2M6IEphY2sgV2FuZyA8amFja193YW5nQHVz
aXNoLmNvbT4NCj5SZXZpZXdlZC1ieTogSmFjZWsgRGFuZWNraSA8amFjZWsuZGFuZWNraUBpbnRl
bC5jb20+DQo+W2phY2VrOiBtb2RpZnkgcG04MDAxX0lfVF9uZXh1c19yZXNldCB0byByZXR1cm4g
LUVOT0RFVl0NCj5TaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGlu
dGVsLmNvbT4NCj4tLS0NCj4gZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgfCAg
IDE5ICsrKysrKysrLS0tLS0tLS0tLS0NCj4gZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfc2Fz
LmMgICAgfCAgICAzICsrLQ0KPiAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEy
IGRlbGV0aW9ucygtKQ0KPg0KPmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19z
Y3NpX2hvc3QuYyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jDQo+aW5kZXgg
ZGVjOTkyYi4uYTVjNGNlNCAxMDA2NDQNCj4tLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19z
Y3NpX2hvc3QuYw0KPisrKyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jDQo+
QEAgLTU3NiwyNSArNTc2LDIyIEBAIGludCBzYXNfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3Ry
dWN0IHNjc2lfY21uZCAqY21kKQ0KPiAJcmV0dXJuIEZBSUxFRDsNCj4gfQ0KPiANCj4tLyogQXR0
ZW1wdCB0byBzZW5kIGEgcGh5IChidXMpIHJlc2V0ICovDQo+IGludCBzYXNfZWhfYnVzX3Jlc2V0
X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21kKQ0KPiB7DQo+LQlzdHJ1Y3QgZG9tYWluX2Rl
dmljZSAqZGV2ID0gY21kX3RvX2RvbWFpbl9kZXYoY21kKTsNCj4tCXN0cnVjdCBzYXNfcGh5ICpw
aHkgPSBzYXNfZ2V0X2xvY2FsX3BoeShkZXYpOw0KPi0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9
IGNtZC0+ZGV2aWNlLT5ob3N0Ow0KPiAJaW50IHJlczsNCj4rCXN0cnVjdCBTY3NpX0hvc3QgKmhv
c3QgPSBjbWQtPmRldmljZS0+aG9zdDsNCj4rCXN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYgPSBj
bWRfdG9fZG9tYWluX2RldihjbWQpOw0KPisJc3RydWN0IHNhc19pbnRlcm5hbCAqaSA9IHRvX3Nh
c19pbnRlcm5hbChob3N0LT50cmFuc3BvcnR0KTsNCj4gDQo+IAlpZiAoY3VycmVudCAhPSBob3N0
LT5laGFuZGxlcikNCj4gCQlyZXR1cm4gc2FzX3F1ZXVlX3Jlc2V0KGRldiwgU0FTX0RFVl9SRVNF
VCwgMCwgMCk7DQo+IA0KPi0JcmVzID0gc2FzX3BoeV9yZXNldChwaHksIDEpOw0KPi0JaWYgKHJl
cykNCj4tCQlTQVNfRFBSSU5USygiQnVzIHJlc2V0IG9mICVzIGZhaWxlZCAweCV4XG4iLA0KPi0J
CQkgICAga29iamVjdF9uYW1lKCZwaHktPmRldi5rb2JqKSwNCj4tCQkJICAgIHJlcyk7DQo+LQlz
YXNfcHV0X2xvY2FsX3BoeShwaHkpOw0KPisJaWYgKCFpLT5kZnQtPmxsZGRfSV9UX25leHVzX3Jl
c2V0KQ0KPisJCXJldHVybiBGQUlMRUQ7DQo+IA0KPi0JaWYgKHJlcyA9PSBUTUZfUkVTUF9GVU5D
X1NVQ0MgfHwgcmVzID09IFRNRl9SRVNQX0ZVTkNfQ09NUExFVEUpDQo+KwlyZXMgPSBpLT5kZnQt
PmxsZGRfSV9UX25leHVzX3Jlc2V0KGRldik7DQo+KwlpZiAocmVzID09IFRNRl9SRVNQX0ZVTkNf
U1VDQyB8fCByZXMgPT0gVE1GX1JFU1BfRlVOQ19DT01QTEVURSB8fA0KPisJICAgIHJlcyA9PSAt
RU5PREVWKQ0KPiAJCXJldHVybiBTVUNDRVNTOw0KPiANCj4gCXJldHVybiBGQUlMRUQ7DQo+ZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jIGIvZHJpdmVycy9zY3Np
L3BtODAwMS9wbTgwMDFfc2FzLmMNCj5pbmRleCBiMTExMDE4Li4zYTAzYjQwIDEwMDY0NA0KPi0t
LSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jDQo+KysrIGIvZHJpdmVycy9zY3Np
L3BtODAwMS9wbTgwMDFfc2FzLmMNCj5AQCAtODY4LDggKzg2OCw5IEBAIGludCBwbTgwMDFfSV9U
X25leHVzX3Jlc2V0KHN0cnVjdCBkb21haW5fZGV2aWNlICpkZXYpDQo+IAlzdHJ1Y3QgcG04MDAx
X2RldmljZSAqcG04MDAxX2RldjsNCj4gCXN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9o
YTsNCj4gCXN0cnVjdCBzYXNfcGh5ICpwaHk7DQo+Kw0KPiAJaWYgKCFkZXYgfHwgIWRldi0+bGxk
ZF9kZXYpDQo+LQkJcmV0dXJuIC0xOw0KPisJCXJldHVybiAtRU5PREVWOw0KPiANCj4gCXBtODAw
MV9kZXYgPSBkZXYtPmxsZGRfZGV2Ow0KPiAJcG04MDAxX2hhID0gcG04MDAxX2ZpbmRfaGFfYnlf
ZGV2KGRldik7DQo+DQo+LS0NCj5UbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0
aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtc2NzaSIgaW4NCj50aGUgYm9keSBvZiBhIG1lc3Nh
Z2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZw0KPk1vcmUgbWFqb3Jkb21vIGluZm8gYXQg
IGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA0KPg0KPl9fX19fX19f
X18gSW5mb3JtYXRpb24gZnJvbSBFU0VUIE5PRDMyIEFudGl2aXJ1cywgdmVyc2lvbiBvZiB2aXJ1
cyBzaWduYXR1cmUgZGF0YWJhc2UgNTY1OSAoMjAxMDExMjkpIF9fX19fX19fX18NCj4NCj5UaGUg
bWVzc2FnZSB3YXMgY2hlY2tlZCBieSBFU0VUIE5PRDMyIEFudGl2aXJ1cy4NCj4NCj5odHRwOi8v
d3d3LmVzZXQuY29tDQo+DQo+DQo+

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c
index dec992b..a5c4ce4 100644
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -576,25 +576,22 @@  int sas_eh_device_reset_handler(struct scsi_cmnd *cmd)
 	return FAILED;
 }
 
-/* Attempt to send a phy (bus) reset */
 int sas_eh_bus_reset_handler(struct scsi_cmnd *cmd)
 {
-	struct domain_device *dev = cmd_to_domain_dev(cmd);
-	struct sas_phy *phy = sas_get_local_phy(dev);
-	struct Scsi_Host *host = cmd->device->host;
 	int res;
+	struct Scsi_Host *host = cmd->device->host;
+	struct domain_device *dev = cmd_to_domain_dev(cmd);
+	struct sas_internal *i = to_sas_internal(host->transportt);
 
 	if (current != host->ehandler)
 		return sas_queue_reset(dev, SAS_DEV_RESET, 0, 0);
 
-	res = sas_phy_reset(phy, 1);
-	if (res)
-		SAS_DPRINTK("Bus reset of %s failed 0x%x\n",
-			    kobject_name(&phy->dev.kobj),
-			    res);
-	sas_put_local_phy(phy);
+	if (!i->dft->lldd_I_T_nexus_reset)
+		return FAILED;
 
-	if (res == TMF_RESP_FUNC_SUCC || res == TMF_RESP_FUNC_COMPLETE)
+	res = i->dft->lldd_I_T_nexus_reset(dev);
+	if (res == TMF_RESP_FUNC_SUCC || res == TMF_RESP_FUNC_COMPLETE ||
+	    res == -ENODEV)
 		return SUCCESS;
 
 	return FAILED;
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index b111018..3a03b40 100644
--- a/drivers/scsi/pm8001/pm8001_sas.c
+++ b/drivers/scsi/pm8001/pm8001_sas.c
@@ -868,8 +868,9 @@  int pm8001_I_T_nexus_reset(struct domain_device *dev)
 	struct pm8001_device *pm8001_dev;
 	struct pm8001_hba_info *pm8001_ha;
 	struct sas_phy *phy;
+
 	if (!dev || !dev->lldd_dev)
-		return -1;
+		return -ENODEV;
 
 	pm8001_dev = dev->lldd_dev;
 	pm8001_ha = pm8001_find_ha_by_dev(dev);