mirror of https://gitee.com/openkylin/linux.git
[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
|
@ -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_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_unit(struct zfcp_unit *);
|
||||
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;
|
||||
|
||||
|
|
|
@ -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_shutdown(struct zfcp_adapter *, int);
|
||||
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 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_adapter *adapter;
|
||||
unsigned long flags;
|
||||
|
||||
unit = (struct zfcp_unit*) scpnt->device->hostdata;
|
||||
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 "
|
||||
"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_wait(adapter);
|
||||
}
|
||||
zfcp_erp_adapter_reopen(adapter, 0);
|
||||
zfcp_erp_wait(adapter);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue