[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>
This commit is contained in:
parent
2abbe866c8
commit
8165428610
3 changed files with 4 additions and 19 deletions
|
@ -91,6 +91,7 @@ static int zfcp_erp_unit_strategy_clearstati(struct zfcp_unit *);
|
||||||
static int zfcp_erp_unit_strategy_close(struct zfcp_erp_action *);
|
static int zfcp_erp_unit_strategy_close(struct zfcp_erp_action *);
|
||||||
static int zfcp_erp_unit_strategy_open(struct zfcp_erp_action *);
|
static int zfcp_erp_unit_strategy_open(struct zfcp_erp_action *);
|
||||||
|
|
||||||
|
static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *);
|
||||||
static void zfcp_erp_action_dismiss_port(struct zfcp_port *);
|
static void zfcp_erp_action_dismiss_port(struct zfcp_port *);
|
||||||
static void zfcp_erp_action_dismiss_unit(struct zfcp_unit *);
|
static void zfcp_erp_action_dismiss_unit(struct zfcp_unit *);
|
||||||
static void zfcp_erp_action_dismiss(struct zfcp_erp_action *);
|
static void zfcp_erp_action_dismiss(struct zfcp_erp_action *);
|
||||||
|
@ -3157,7 +3158,7 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
|
static void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct zfcp_port *port;
|
struct zfcp_port *port;
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,6 @@ extern void zfcp_erp_modify_adapter_status(struct zfcp_adapter *, u32, int);
|
||||||
extern int zfcp_erp_adapter_reopen(struct zfcp_adapter *, int);
|
extern int zfcp_erp_adapter_reopen(struct zfcp_adapter *, int);
|
||||||
extern int zfcp_erp_adapter_shutdown(struct zfcp_adapter *, int);
|
extern int zfcp_erp_adapter_shutdown(struct zfcp_adapter *, int);
|
||||||
extern void zfcp_erp_adapter_failed(struct zfcp_adapter *);
|
extern void zfcp_erp_adapter_failed(struct zfcp_adapter *);
|
||||||
extern void zfcp_erp_action_dismiss_adapter(struct zfcp_adapter *);
|
|
||||||
|
|
||||||
extern void zfcp_erp_modify_port_status(struct zfcp_port *, u32, int);
|
extern void zfcp_erp_modify_port_status(struct zfcp_port *, u32, int);
|
||||||
extern int zfcp_erp_port_reopen(struct zfcp_port *, int);
|
extern int zfcp_erp_port_reopen(struct zfcp_port *, int);
|
||||||
|
|
|
@ -544,7 +544,6 @@ int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
|
||||||
{
|
{
|
||||||
struct zfcp_unit *unit;
|
struct zfcp_unit *unit;
|
||||||
struct zfcp_adapter *adapter;
|
struct zfcp_adapter *adapter;
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
unit = (struct zfcp_unit*) scpnt->device->hostdata;
|
unit = (struct zfcp_unit*) scpnt->device->hostdata;
|
||||||
adapter = unit->port->adapter;
|
adapter = unit->port->adapter;
|
||||||
|
@ -552,22 +551,8 @@ int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
|
||||||
ZFCP_LOG_NORMAL("host/bus reset because of problems with "
|
ZFCP_LOG_NORMAL("host/bus reset because of problems with "
|
||||||
"unit 0x%016Lx\n", unit->fcp_lun);
|
"unit 0x%016Lx\n", unit->fcp_lun);
|
||||||
|
|
||||||
write_lock_irqsave(&adapter->erp_lock, flags);
|
|
||||||
if (atomic_test_mask(ZFCP_STATUS_ADAPTER_ERP_PENDING,
|
|
||||||
&adapter->status)) {
|
|
||||||
zfcp_erp_modify_adapter_status(adapter,
|
|
||||||
ZFCP_STATUS_COMMON_UNBLOCKED|ZFCP_STATUS_COMMON_OPEN,
|
|
||||||
ZFCP_CLEAR);
|
|
||||||
zfcp_erp_action_dismiss_adapter(adapter);
|
|
||||||
write_unlock_irqrestore(&adapter->erp_lock, flags);
|
|
||||||
zfcp_fsf_req_dismiss_all(adapter);
|
|
||||||
adapter->fsf_req_seq_no = 0;
|
|
||||||
zfcp_erp_adapter_reopen(adapter, 0);
|
|
||||||
} else {
|
|
||||||
write_unlock_irqrestore(&adapter->erp_lock, flags);
|
|
||||||
zfcp_erp_adapter_reopen(adapter, 0);
|
zfcp_erp_adapter_reopen(adapter, 0);
|
||||||
zfcp_erp_wait(adapter);
|
zfcp_erp_wait(adapter);
|
||||||
}
|
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue