mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 16:14:13 +08:00
scsi: megaraid: Pass in NULL scb for host reset
When calling a host reset we shouldn't rely on the command triggering the reset, so allow megaraid_abort_and_reset() to be called with a NULL scb. And drop the pointless 'bus_reset' and 'target_reset' handlers, which just call the same function as host_reset. Signed-off-by: Hannes Reinecke <hare@suse.de> Link: https://lore.kernel.org/r/20231002154328.43718-12-hare@suse.de Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
397ff21a96
commit
5bcd3bfbda
@ -1898,7 +1898,7 @@ megaraid_reset(struct scsi_cmnd *cmd)
|
||||
|
||||
spin_lock_irq(&adapter->lock);
|
||||
|
||||
rval = megaraid_abort_and_reset(adapter, cmd, SCB_RESET);
|
||||
rval = megaraid_abort_and_reset(adapter, NULL, SCB_RESET);
|
||||
|
||||
/*
|
||||
* This is required here to complete any completed requests
|
||||
@ -1937,7 +1937,7 @@ megaraid_abort_and_reset(adapter_t *adapter, struct scsi_cmnd *cmd, int aor)
|
||||
|
||||
scb = list_entry(pos, scb_t, list);
|
||||
|
||||
if (scb->cmd == cmd) { /* Found command */
|
||||
if (!cmd || scb->cmd == cmd) { /* Found command */
|
||||
|
||||
scb->state |= aor;
|
||||
|
||||
@ -1956,31 +1956,23 @@ megaraid_abort_and_reset(adapter_t *adapter, struct scsi_cmnd *cmd, int aor)
|
||||
|
||||
return FAILED;
|
||||
}
|
||||
else {
|
||||
|
||||
/*
|
||||
* Not yet issued! Remove from the pending
|
||||
* list
|
||||
*/
|
||||
dev_warn(&adapter->dev->dev,
|
||||
"%s-[%x], driver owner\n",
|
||||
(aor==SCB_ABORT) ? "ABORTING":"RESET",
|
||||
scb->idx);
|
||||
|
||||
mega_free_scb(adapter, scb);
|
||||
|
||||
if( aor == SCB_ABORT ) {
|
||||
cmd->result = (DID_ABORT << 16);
|
||||
}
|
||||
else {
|
||||
cmd->result = (DID_RESET << 16);
|
||||
}
|
||||
/*
|
||||
* Not yet issued! Remove from the pending
|
||||
* list
|
||||
*/
|
||||
dev_warn(&adapter->dev->dev,
|
||||
"%s-[%x], driver owner\n",
|
||||
(cmd) ? "ABORTING":"RESET",
|
||||
scb->idx);
|
||||
mega_free_scb(adapter, scb);
|
||||
|
||||
if (cmd) {
|
||||
cmd->result = (DID_ABORT << 16);
|
||||
list_add_tail(SCSI_LIST(cmd),
|
||||
&adapter->completed_list);
|
||||
|
||||
return SUCCESS;
|
||||
&adapter->completed_list);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4114,8 +4106,6 @@ static const struct scsi_host_template megaraid_template = {
|
||||
.sg_tablesize = MAX_SGLIST,
|
||||
.cmd_per_lun = DEF_CMD_PER_LUN,
|
||||
.eh_abort_handler = megaraid_abort,
|
||||
.eh_device_reset_handler = megaraid_reset,
|
||||
.eh_bus_reset_handler = megaraid_reset,
|
||||
.eh_host_reset_handler = megaraid_reset,
|
||||
.no_write_same = 1,
|
||||
.cmd_size = sizeof(struct megaraid_cmd_priv),
|
||||
|
Loading…
Reference in New Issue
Block a user