scsi: qla2xxx: don't break the bsg-lib abstractions
authorChristoph Hellwig <hch@lst.de>
Tue, 3 Oct 2017 10:48:40 +0000 (12:48 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 17 Oct 2017 03:46:21 +0000 (23:46 -0400)
Always use bsg_job->reply instead of scsi_req(bsg_job->req)->sense), as
they always point to the same memory.

Never set scsi_req(bsg_job->req)->result and we'll set that value
through bsg_job_done.

[mkp: applied by hand, fixed whitespace]

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Tested-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_bsg.c
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/qla2xxx/qla_mr.c

index 451d9709bc06aaa50bb422656a69af82e73380bb..e3ac7078d2aaa722ce476c4d3595814437ccbfdc 100644 (file)
@@ -919,9 +919,9 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)
 
        bsg_job->reply_len = sizeof(struct fc_bsg_reply) +
            sizeof(response) + sizeof(uint8_t);
-       fw_sts_ptr = ((uint8_t *)scsi_req(bsg_job->req)->sense) +
-           sizeof(struct fc_bsg_reply);
-       memcpy(fw_sts_ptr, response, sizeof(response));
+       fw_sts_ptr = bsg_job->reply + sizeof(struct fc_bsg_reply);
+       memcpy(bsg_job->reply + sizeof(struct fc_bsg_reply), response,
+                       sizeof(response));
        fw_sts_ptr += sizeof(response);
        *fw_sts_ptr = command_sent;
 
@@ -2553,13 +2553,11 @@ qla24xx_bsg_timeout(struct bsg_job *bsg_job)
                                                ql_log(ql_log_warn, vha, 0x7089,
                                                    "mbx abort_command "
                                                    "failed.\n");
-                                               scsi_req(bsg_job->req)->result =
                                                bsg_reply->result = -EIO;
                                        } else {
                                                ql_dbg(ql_dbg_user, vha, 0x708a,
                                                    "mbx abort_command "
                                                    "success.\n");
-                                               scsi_req(bsg_job->req)->result =
                                                bsg_reply->result = 0;
                                        }
                                        spin_lock_irqsave(&ha->hardware_lock, flags);
@@ -2570,7 +2568,7 @@ qla24xx_bsg_timeout(struct bsg_job *bsg_job)
        }
        spin_unlock_irqrestore(&ha->hardware_lock, flags);
        ql_log(ql_log_info, vha, 0x708b, "SRB not found to abort.\n");
-       scsi_req(bsg_job->req)->result = bsg_reply->result = -ENXIO;
+       bsg_reply->result = -ENXIO;
        return 0;
 
 done:
index e9b14405e7d4973192eab0d013ef6f156ec5522a..2fd79129bb2ac56f48b0d2c6f0ea2a46ba44c9de 100644 (file)
@@ -1544,7 +1544,6 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
        struct fc_bsg_reply *bsg_reply;
        uint16_t comp_status;
        uint32_t fw_status[3];
-       uint8_t* fw_sts_ptr;
        int res;
        struct srb_iocb *els;
 
@@ -1637,11 +1636,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
                            type, sp->handle, comp_status, fw_status[1], fw_status[2],
                            le16_to_cpu(((struct els_sts_entry_24xx *)
                                pkt)->total_byte_count));
-                       fw_sts_ptr = ((uint8_t*)scsi_req(bsg_job->req)->sense) +
-                               sizeof(struct fc_bsg_reply);
-                       memcpy( fw_sts_ptr, fw_status, sizeof(fw_status));
-               }
-               else {
+               } else {
                        ql_dbg(ql_dbg_user, vha, 0x5040,
                            "ELS-CT pass-through-%s error hdl=%x comp_status-status=0x%x "
                            "error subcode 1=0x%x error subcode 2=0x%x.\n",
@@ -1652,10 +1647,9 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
                                    pkt)->error_subcode_2));
                        res = DID_ERROR << 16;
                        bsg_reply->reply_payload_rcv_len = 0;
-                       fw_sts_ptr = ((uint8_t*)scsi_req(bsg_job->req)->sense) +
-                                       sizeof(struct fc_bsg_reply);
-                       memcpy( fw_sts_ptr, fw_status, sizeof(fw_status));
                }
+               memcpy(bsg_job->reply + sizeof(struct fc_bsg_reply),
+                      fw_status, sizeof(fw_status));
                ql_dump_buffer(ql_dbg_user + ql_dbg_buffer, vha, 0x5056,
                                (uint8_t *)pkt, sizeof(*pkt));
        }
index e23a3d4c36f39b81f2594b95582018f16a59931b..d5da3981cefec8caedcce7b3a91a4c3ff901651b 100644 (file)
@@ -2245,8 +2245,7 @@ qlafx00_ioctl_iosb_entry(scsi_qla_host_t *vha, struct req_que *req,
                memcpy(fstatus.reserved_3,
                    pkt->reserved_2, 20 * sizeof(uint8_t));
 
-               fw_sts_ptr = ((uint8_t *)scsi_req(bsg_job->req)->sense) +
-                   sizeof(struct fc_bsg_reply);
+               fw_sts_ptr = bsg_job->reply + sizeof(struct fc_bsg_reply);
 
                memcpy(fw_sts_ptr, (uint8_t *)&fstatus,
                    sizeof(struct qla_mt_iocb_rsp_fx00));