]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: megaraid: Pass in NULL scb for host reset
authorHannes Reinecke <hare@suse.de>
Mon, 2 Oct 2023 15:43:21 +0000 (17:43 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 13 Oct 2023 18:23:15 +0000 (14:23 -0400)
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>
drivers/scsi/megaraid.c

index e92f1a73cc9bccdec8ad7af534f44b9a4e5f26f8..329c3da88416a83d053d8f923cfc4f13d6e86b05 100644 (file)
@@ -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),