+++ /dev/null
-From: Gerald Schaefer <geraldsc@de.ibm.com>
-Subject: zfcp: SCSI queue ERP deadlock
-References: bnc#487755,LTC#52401
-
-Symptom: The I/O stalls if the an error injection is triggerd on
- the storage side.
-Problem: The ERP is waiting for the fc tranport class to finish a
- task which has triggered a task for the SCSI error handler
- which in turn is waiting for the ERP to finish ->deadlock.
-Solution: Don't let the ERP wait for anything and move the fulfillment
- check of the scheduled task to the async running job (scsi scan)
-
-Acked-by: John Jolly <jjolly@suse.de>
-
----
- drivers/s390/scsi/zfcp_erp.c | 1 -
- drivers/s390/scsi/zfcp_scsi.c | 6 +++++-
- 2 files changed, 5 insertions(+), 2 deletions(-)
-
-Index: linux-sles11/drivers/s390/scsi/zfcp_erp.c
-===================================================================
---- linux-sles11.orig/drivers/s390/scsi/zfcp_erp.c
-+++ linux-sles11/drivers/s390/scsi/zfcp_erp.c
-@@ -1192,7 +1192,6 @@ static void zfcp_erp_action_cleanup(stru
-
- switch (act->action) {
- case ZFCP_ERP_ACTION_REOPEN_UNIT:
-- flush_work(&port->rport_work);
- if ((result == ZFCP_ERP_SUCCEEDED) && !unit->device) {
- atomic_set_mask(ZFCP_STATUS_UNIT_REGISTERED,
- &unit->status);
-Index: linux-sles11/drivers/s390/scsi/zfcp_scsi.c
-===================================================================
---- linux-sles11.orig/drivers/s390/scsi/zfcp_scsi.c
-+++ linux-sles11/drivers/s390/scsi/zfcp_scsi.c
-@@ -592,7 +593,10 @@ void zfcp_scsi_scan(struct work_struct *
- {
- struct zfcp_unit *unit = container_of(work, struct zfcp_unit,
- scsi_work);
-- struct fc_rport *rport = unit->port->rport;
-+ struct fc_rport *rport;
-+
-+ flush_work(&unit->port->rport_work);
-+ rport = unit->port->rport;
-
- if (rport && rport->port_state == FC_PORTSTATE_ONLINE)
- scsi_scan_target(&rport->dev, 0, rport->scsi_target_id,