scsi: qla2xxx: Return appropriate failure through BSG Interface
authorMichael Hernandez <mhernandez@marvell.com>
Wed, 26 Feb 2020 22:40:10 +0000 (14:40 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 29 Feb 2020 01:32:29 +0000 (20:32 -0500)
This patch ensures flash updates API calls return possible failure
status through BSG interface to the application.

Link: https://lore.kernel.org/r/20200226224022.24518-7-hmadhani@marvell.com
Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Michael Hernandez <mhernandez@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_bsg.c
drivers/scsi/qla2xxx/qla_sup.c

index 714bcf5..97b51c4 100644 (file)
@@ -1517,10 +1517,15 @@ qla2x00_update_optrom(struct bsg_job *bsg_job)
            bsg_job->request_payload.sg_cnt, ha->optrom_buffer,
            ha->optrom_region_size);
 
-       ha->isp_ops->write_optrom(vha, ha->optrom_buffer,
+       rval = ha->isp_ops->write_optrom(vha, ha->optrom_buffer,
            ha->optrom_region_start, ha->optrom_region_size);
 
-       bsg_reply->result = DID_OK;
+       if (rval) {
+               bsg_reply->result = -EINVAL;
+               rval = -EINVAL;
+       } else {
+               bsg_reply->result = DID_OK;
+       }
        vfree(ha->optrom_buffer);
        ha->optrom_buffer = NULL;
        ha->optrom_state = QLA_SWAITING;
index 76a38bf..3da79ee 100644 (file)
@@ -2683,7 +2683,7 @@ qla28xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr,
        uint32_t sec_mask, rest_addr, fdata;
        void *optrom = NULL;
        dma_addr_t optrom_dma;
-       int rval;
+       int rval, ret;
        struct secure_flash_update_block *sfub;
        dma_addr_t sfub_dma;
        uint32_t offset = faddr << 2;
@@ -2939,11 +2939,12 @@ qla28xx_write_flash_data(scsi_qla_host_t *vha, uint32_t *dwptr, uint32_t faddr,
 write_protect:
        ql_log(ql_log_warn + ql_dbg_verbose, vha, 0x7095,
            "Protect flash...\n");
-       rval = qla24xx_protect_flash(vha);
-       if (rval) {
+       ret = qla24xx_protect_flash(vha);
+       if (ret) {
                qla81xx_fac_semaphore_access(vha, FAC_SEMAPHORE_UNLOCK);
                ql_log(ql_log_warn, vha, 0x7099,
                    "Failed protect flash\n");
+               rval = QLA_COMMAND_ERROR;
        }
 
        if (reset_to_rom == true) {
@@ -2951,10 +2952,12 @@ write_protect:
                set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
                qla2xxx_wake_dpc(vha);
 
-               rval = qla2x00_wait_for_hba_online(vha);
-               if (rval != QLA_SUCCESS)
+               ret = qla2x00_wait_for_hba_online(vha);
+               if (ret != QLA_SUCCESS) {
                        ql_log(ql_log_warn, vha, 0xffff,
                            "Adapter did not come out of reset\n");
+                       rval = QLA_COMMAND_ERROR;
+               }
        }
 
 done: