scsi: esp_scsi: Clean up control flow and dead code
authorFinn Thain <fthain@telegraphics.com.au>
Fri, 4 Aug 2017 05:43:19 +0000 (01:43 -0400)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 10 Aug 2017 23:55:34 +0000 (19:55 -0400)
This patch improves readability. There are no functional changes.

Since this touches on a questionable ESP_INTR_DC conditional, add some
commentary to help others who may (as I did) find themselves chasing an
"Invalid Command" error after the device flags this condition.

This cleanup also eliminates a warning from "make W=1":
drivers/scsi/esp_scsi.c: In function 'esp_finish_select':
drivers/scsi/esp_scsi.c:1233:5: warning: variable 'orig_select_state' set but not used [-Wunused-but-set-variable]
  u8 orig_select_state;

Tested-by: Stan Johnson <userm57@yahoo.com>
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/esp_scsi.c
drivers/scsi/esp_scsi.h

index 71cb05b..93fef2b 100644 (file)
@@ -597,14 +597,12 @@ static int esp_alloc_lun_tag(struct esp_cmd_entry *ent,
 
                lp->non_tagged_cmd = ent;
                return 0;
-       } else {
-               /* Tagged command, see if blocked by a
-                * non-tagged one.
-                */
-               if (lp->non_tagged_cmd || lp->hold)
-                       return -EBUSY;
        }
 
+       /* Tagged command. Check that it isn't blocked by a non-tagged one. */
+       if (lp->non_tagged_cmd || lp->hold)
+               return -EBUSY;
+
        BUG_ON(lp->tagged_cmds[ent->orig_tag[1]]);
 
        lp->tagged_cmds[ent->orig_tag[1]] = ent;
@@ -1210,12 +1208,6 @@ static int esp_reconnect(struct esp *esp)
 
        esp->active_cmd = ent;
 
-       if (ent->flags & ESP_CMD_FLAG_ABORT) {
-               esp->msg_out[0] = ABORT_TASK_SET;
-               esp->msg_out_len = 1;
-               scsi_esp_cmd(esp, ESP_CMD_SATN);
-       }
-
        esp_event(esp, ESP_EVENT_CHECK_PHASE);
        esp_restore_pointers(esp, ent);
        esp->flags |= ESP_FLAG_QUICKIRQ_CHECK;
@@ -1230,9 +1222,6 @@ static int esp_finish_select(struct esp *esp)
 {
        struct esp_cmd_entry *ent;
        struct scsi_cmnd *cmd;
-       u8 orig_select_state;
-
-       orig_select_state = esp->select_state;
 
        /* No longer selecting.  */
        esp->select_state = ESP_SELECT_NONE;
@@ -1745,7 +1734,6 @@ again:
                        return 0;
                }
                goto again;
-               break;
 
        case ESP_EVENT_DATA_IN:
                write = 1;
@@ -1956,12 +1944,14 @@ again:
                } else {
                        if (esp->msg_out_len > 1)
                                esp->ops->dma_invalidate(esp);
-               }
 
-               if (!(esp->ireg & ESP_INTR_DC)) {
-                       if (esp->rev != FASHME)
+                       /* XXX if the chip went into disconnected mode,
+                        * we can't run the phase state machine anyway.
+                        */
+                       if (!(esp->ireg & ESP_INTR_DC))
                                scsi_esp_cmd(esp, ESP_CMD_NULL);
                }
+
                esp_event(esp, ESP_EVENT_CHECK_PHASE);
                goto again;
        case ESP_EVENT_MSGIN:
@@ -2022,7 +2012,6 @@ again:
                }
                esp_schedule_reset(esp);
                return 0;
-               break;
 
        case ESP_EVENT_RESET:
                scsi_esp_cmd(esp, ESP_CMD_RS);
@@ -2033,7 +2022,6 @@ again:
                             "Unexpected event %x, resetting\n", esp->event);
                esp_schedule_reset(esp);
                return 0;
-               break;
        }
        return 1;
 }
@@ -2170,14 +2158,14 @@ static void __esp_interrupt(struct esp *esp)
 
                esp_schedule_reset(esp);
        } else {
-               if (!(esp->ireg & ESP_INTR_RSEL)) {
-                       /* Some combination of FDONE, BSERV, DC.  */
-                       if (esp->select_state != ESP_SELECT_NONE)
-                               intr_done = esp_finish_select(esp);
-               } else if (esp->ireg & ESP_INTR_RSEL) {
+               if (esp->ireg & ESP_INTR_RSEL) {
                        if (esp->active_cmd)
                                (void) esp_finish_select(esp);
                        intr_done = esp_reconnect(esp);
+               } else {
+                       /* Some combination of FDONE, BSERV, DC. */
+                       if (esp->select_state != ESP_SELECT_NONE)
+                               intr_done = esp_finish_select(esp);
                }
        }
        while (!intr_done)
index 84dcbe4..7e8932a 100644 (file)
@@ -281,7 +281,6 @@ struct esp_cmd_entry {
 
        u8                      flags;
 #define ESP_CMD_FLAG_WRITE     0x01 /* DMA is a write */
-#define ESP_CMD_FLAG_ABORT     0x02 /* being aborted */
 #define ESP_CMD_FLAG_AUTOSENSE 0x04 /* Doing automatic REQUEST_SENSE */
 #define ESP_CMD_FLAG_RESIDUAL  0x08 /* AM53c974 BLAST residual */