aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi
diff options
context:
space:
mode:
authorAndreas Herrmann <aherrman@de.ibm.com>2006-09-18 16:30:36 -0400
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-09-23 19:01:46 -0400
commit8165428610446ea9e6aa9dfa5485ab78e58cc9fc (patch)
treec410ad0f802abd86461a04ea7a4f552447e3ed03 /drivers/s390/scsi
parent2abbe866c8eb0296e3f5343bcf73e5371522a738 (diff)
[SCSI] zfcp: fix: avoid removal of fsf reqs before qdio queues are down
Fix the fix ... One of my previous fixes introduced removal of all fsf requests in zfcp's eh_host_reset_handler. But this must not happen before qdio queues are shut down. So, I revert the changes of zfcp_scsi_eh_host_reset_handler. Signed-off-by: Andreas Herrmann <aherrman@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r--drivers/s390/scsi/zfcp_erp.c3
-rw-r--r--drivers/s390/scsi/zfcp_ext.h1
-rw-r--r--drivers/s390/scsi/zfcp_scsi.c19
3 files changed, 4 insertions, 19 deletions
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
index af42a0eadf03..862a411a4aa0 100644
--- a/drivers/s390/scsi/zfcp_erp.c
+++ b/drivers/s390/scsi/zfcp_erp.c
@@ -91,6 +91,7 @@ static int zfcp_erp_unit_strategy_clearstati(struct zfcp_unit *);
91static int zfcp_erp_unit_strategy_close(struct zfcp_erp_action *); 91static int zfcp_erp_unit_strategy_close(struct zfcp_erp_action *);
92static int zfcp_erp_unit_strategy_open(struct zfcp_erp_action *); 92static int zfcp_erp_unit_strategy_open(struct zfcp_erp_action *);
93 93
94static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *);
94static void zfcp_erp_action_dismiss_port(struct zfcp_port *); 95static void zfcp_erp_action_dismiss_port(struct zfcp_port *);
95static void zfcp_erp_action_dismiss_unit(struct zfcp_unit *); 96static void zfcp_erp_action_dismiss_unit(struct zfcp_unit *);
96static void zfcp_erp_action_dismiss(struct zfcp_erp_action *); 97static void zfcp_erp_action_dismiss(struct zfcp_erp_action *);
@@ -3157,7 +3158,7 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter,
3157} 3158}
3158 3159
3159 3160
3160void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter) 3161static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
3161{ 3162{
3162 struct zfcp_port *port; 3163 struct zfcp_port *port;
3163 3164
diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h
index 3125a42a6343..b8794d77285d 100644
--- a/drivers/s390/scsi/zfcp_ext.h
+++ b/drivers/s390/scsi/zfcp_ext.h
@@ -134,7 +134,6 @@ extern void zfcp_erp_modify_adapter_status(struct zfcp_adapter *, u32, int);
134extern int zfcp_erp_adapter_reopen(struct zfcp_adapter *, int); 134extern int zfcp_erp_adapter_reopen(struct zfcp_adapter *, int);
135extern int zfcp_erp_adapter_shutdown(struct zfcp_adapter *, int); 135extern int zfcp_erp_adapter_shutdown(struct zfcp_adapter *, int);
136extern void zfcp_erp_adapter_failed(struct zfcp_adapter *); 136extern void zfcp_erp_adapter_failed(struct zfcp_adapter *);
137extern void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *);
138 137
139extern void zfcp_erp_modify_port_status(struct zfcp_port *, u32, int); 138extern void zfcp_erp_modify_port_status(struct zfcp_port *, u32, int);
140extern int zfcp_erp_port_reopen(struct zfcp_port *, int); 139extern int zfcp_erp_port_reopen(struct zfcp_port *, int);
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
index 753bb9b2fe74..7cafa34e4c7f 100644
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -544,7 +544,6 @@ int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
544{ 544{
545 struct zfcp_unit *unit; 545 struct zfcp_unit *unit;
546 struct zfcp_adapter *adapter; 546 struct zfcp_adapter *adapter;
547 unsigned long flags;
548 547
549 unit = (struct zfcp_unit*) scpnt->device->hostdata; 548 unit = (struct zfcp_unit*) scpnt->device->hostdata;
550 adapter = unit->port->adapter; 549 adapter = unit->port->adapter;
@@ -552,22 +551,8 @@ int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
552 ZFCP_LOG_NORMAL("host/bus reset because of problems with " 551 ZFCP_LOG_NORMAL("host/bus reset because of problems with "
553 "unit 0x%016Lx\n", unit->fcp_lun); 552 "unit 0x%016Lx\n", unit->fcp_lun);
554 553
555 write_lock_irqsave(&adapter->erp_lock, flags); 554 zfcp_erp_adapter_reopen(adapter, 0);
556 if (atomic_test_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING, 555 zfcp_erp_wait(adapter);
557 &adapter->status)) {
558 zfcp_erp_modify_adapter_status(adapter,
559 ZFCP_STATUS_COMMON_UNBLOCKED|ZFCP_STATUS_COMMON_OPEN,
560 ZFCP_CLEAR);
561 zfcp_erp_action_dismiss_adapter(adapter);
562 write_unlock_irqrestore(&adapter->erp_lock, flags);
563 zfcp_fsf_req_dismiss_all(adapter);
564 adapter->fsf_req_seq_no = 0;
565 zfcp_erp_adapter_reopen(adapter, 0);
566 } else {
567 write_unlock_irqrestore(&adapter->erp_lock, flags);
568 zfcp_erp_adapter_reopen(adapter, 0);
569 zfcp_erp_wait(adapter);
570 }
571 556
572 return SUCCESS; 557 return SUCCESS;
573} 558}