scsi: zfcp: use enum zfcp_erp_steps for struct zfcp_erp_action.step
authorSteffen Maier <maier@linux.ibm.com>
Thu, 8 Nov 2018 14:44:51 +0000 (15:44 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 15 Nov 2018 20:01:18 +0000 (15:01 -0500)
Use the already defined enum for this purpose to get at least some build
checking (even though an enum is type equivalent to an int in C).  v2.6.27
commit 287ac01acf22 ("[SCSI] zfcp: Cleanup code in zfcp_erp.c") introduced
the enum which was cpp defines previously.

Since struct zfcp_erp_action type is embedded into other structures living
in zfcp_def.h, we have to move enum zfcp_erp_act_type from its private
definition in zfcp_erp.c to the zfcp-global zfcp_def.h

Silence some false -Wswitch compiler warning cases with individual NOP
cases. When adding more enum values and building with W=1 we would get
compiler warnings about missed new cases.

Add missing break statements in some of the above switch cases.  No
functional change, but making it future-proof.  I think all of these should
have had a break statement ever since, even if these switch cases happened
to be the last ones in the switch statement body.

"Fall through" in the context of switch case usually means not to have a
break and fall through to the subsequent switch case. However, I think this
old comment meant that here we do not have an _early return_ in the switch
case but the code path continues after the switch case body.

Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/s390/scsi/zfcp_def.h
drivers/s390/scsi/zfcp_erp.c

index 121db4aa64bb5529b24458fb4c91c7088e9912bc..87d2f47a6990b5db7ca9f67ffa4b090de5429b95 100644 (file)
@@ -107,6 +107,20 @@ enum zfcp_erp_act_type {
        ZFCP_ERP_ACTION_REOPEN_ADAPTER     = 4,
 };
 
+/*
+ * Values must fit into u16 because of code dependencies:
+ * zfcp_dbf_rec_run_lvl(), zfcp_dbf_rec_run(), zfcp_dbf_rec_run_wka(),
+ * &zfcp_dbf_rec_running.rec_step.
+ */
+enum zfcp_erp_steps {
+       ZFCP_ERP_STEP_UNINITIALIZED     = 0x0000,
+       ZFCP_ERP_STEP_PHYS_PORT_CLOSING = 0x0010,
+       ZFCP_ERP_STEP_PORT_CLOSING      = 0x0100,
+       ZFCP_ERP_STEP_PORT_OPENING      = 0x0800,
+       ZFCP_ERP_STEP_LUN_CLOSING       = 0x1000,
+       ZFCP_ERP_STEP_LUN_OPENING       = 0x2000,
+};
+
 struct zfcp_erp_action {
        struct list_head list;
        enum zfcp_erp_act_type type;  /* requested action code */
@@ -114,7 +128,7 @@ struct zfcp_erp_action {
        struct zfcp_port *port;
        struct scsi_device *sdev;
        u32             status;       /* recovery status */
-       u32 step;                     /* active step of this erp action */
+       enum zfcp_erp_steps     step;   /* active step of this erp action */
        unsigned long           fsf_req_id;
        struct timer_list timer;
 };
index 49d04e5af55fa6e3a9331cf35966bd86585447d9..3da870e55ab5817f8325f32037ea0fca10bb0bf3 100644 (file)
@@ -24,15 +24,6 @@ enum zfcp_erp_act_flags {
        ZFCP_STATUS_ERP_NO_REF          = 0x00800000,
 };
 
-enum zfcp_erp_steps {
-       ZFCP_ERP_STEP_UNINITIALIZED     = 0x0000,
-       ZFCP_ERP_STEP_PHYS_PORT_CLOSING = 0x0010,
-       ZFCP_ERP_STEP_PORT_CLOSING      = 0x0100,
-       ZFCP_ERP_STEP_PORT_OPENING      = 0x0800,
-       ZFCP_ERP_STEP_LUN_CLOSING       = 0x1000,
-       ZFCP_ERP_STEP_LUN_OPENING       = 0x2000,
-};
-
 /*
  * Eyecatcher pseudo flag to bitwise or-combine with enum zfcp_erp_act_type.
  * Used to indicate that an ERP action could not be set up despite a detected
@@ -900,6 +891,13 @@ static int zfcp_erp_port_forced_strategy(struct zfcp_erp_action *erp_action)
        case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
                if (!(status & ZFCP_STATUS_PORT_PHYS_OPEN))
                        return ZFCP_ERP_SUCCEEDED;
+               break;
+       case ZFCP_ERP_STEP_PORT_CLOSING:
+       case ZFCP_ERP_STEP_PORT_OPENING:
+       case ZFCP_ERP_STEP_LUN_CLOSING:
+       case ZFCP_ERP_STEP_LUN_OPENING:
+               /* NOP */
+               break;
        }
        return ZFCP_ERP_FAILED;
 }
@@ -974,7 +972,12 @@ static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act)
                        port->d_id = 0;
                        return ZFCP_ERP_FAILED;
                }
-               /* fall through otherwise */
+               /* no early return otherwise, continue after switch case */
+               break;
+       case ZFCP_ERP_STEP_LUN_CLOSING:
+       case ZFCP_ERP_STEP_LUN_OPENING:
+               /* NOP */
+               break;
        }
        return ZFCP_ERP_FAILED;
 }
@@ -998,6 +1001,12 @@ static int zfcp_erp_port_strategy(struct zfcp_erp_action *erp_action)
                if (p_status & ZFCP_STATUS_COMMON_OPEN)
                        return ZFCP_ERP_FAILED;
                break;
+       case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
+       case ZFCP_ERP_STEP_PORT_OPENING:
+       case ZFCP_ERP_STEP_LUN_CLOSING:
+       case ZFCP_ERP_STEP_LUN_OPENING:
+               /* NOP */
+               break;
        }
 
 close_init_done:
@@ -1058,6 +1067,12 @@ static int zfcp_erp_lun_strategy(struct zfcp_erp_action *erp_action)
        case ZFCP_ERP_STEP_LUN_OPENING:
                if (atomic_read(&zfcp_sdev->status) & ZFCP_STATUS_COMMON_OPEN)
                        return ZFCP_ERP_SUCCEEDED;
+               break;
+       case ZFCP_ERP_STEP_PHYS_PORT_CLOSING:
+       case ZFCP_ERP_STEP_PORT_CLOSING:
+       case ZFCP_ERP_STEP_PORT_OPENING:
+               /* NOP */
+               break;
        }
        return ZFCP_ERP_FAILED;
 }