All these drivers are trevialy converted from memcpy into command's
  sense_buffer from a driver private area, to the new scsi_eh_cpy_sense()
  API. Some also do amaturistic sense editing or printing.

  FIXME: weed out these drivers that this patch is a bugfix for.
        (copy more than what they have at private area)

  The list of converted drivers:
           arch/ia64/hp/sim/simscsi.c
           drivers/block/cciss_scsi.c
           drivers/infiniband/ulp/srp/ib_srp.c
           drivers/message/fusion/mptscsih.c
           drivers/message/i2o/i2o_scsi.c
           drivers/scsi/3w-9xxx.c
           drivers/scsi/a100u2w.c
           drivers/scsi/aha1542.c
           drivers/scsi/aha1740.c
           drivers/scsi/atp870u.c
           drivers/scsi/hptiop.c
           drivers/scsi/ibmvscsi/ibmvscsi.c
           drivers/scsi/ibmvscsi/ibmvstgt.c
           drivers/scsi/ide-scsi.c
           drivers/scsi/libiscsi.c
           drivers/scsi/libsas/sas_scsi_host.c
           drivers/scsi/lpfc/lpfc_scsi.c
           drivers/scsi/megaraid.c
           drivers/scsi/megaraid/megaraid_sas.c
           drivers/scsi/ncr53c8xx.c
           drivers/scsi/qlogicpti.c
           drivers/scsi/scsi_debug.c
           drivers/scsi/sym53c8xx_2/sym_glue.c

Signed-off-by: Boaz Harrosh <[EMAIL PROTECTED]>
---
 arch/ia64/hp/sim/simscsi.c           |    8 ++++++--
 drivers/block/cciss_scsi.c           |    8 +++-----
 drivers/infiniband/ulp/srp/ib_srp.c  |    6 +++---
 drivers/message/fusion/mptscsih.c    |    9 +++++----
 drivers/message/i2o/i2o_scsi.c       |    4 ++--
 drivers/scsi/3w-9xxx.c               |    5 ++++-
 drivers/scsi/a100u2w.c               |    4 ++--
 drivers/scsi/aha1542.c               |    4 ++--
 drivers/scsi/aha1740.c               |    4 ++--
 drivers/scsi/atp870u.c               |    1 -
 drivers/scsi/hptiop.c                |    6 +++---
 drivers/scsi/ibmvscsi/ibmvscsi.c     |    4 +---
 drivers/scsi/ibmvscsi/ibmvstgt.c     |    2 +-
 drivers/scsi/ide-scsi.c              |    4 +++-
 drivers/scsi/libiscsi.c              |    6 ++----
 drivers/scsi/libsas/sas_scsi_host.c  |    3 +--
 drivers/scsi/lpfc/lpfc_scsi.c        |    9 ++++-----
 drivers/scsi/megaraid.c              |   14 +++++++++-----
 drivers/scsi/megaraid/megaraid_sas.c |    6 +++---
 drivers/scsi/ncr53c8xx.c             |    9 ++++-----
 drivers/scsi/qlogicpti.c             |    4 ++--
 drivers/scsi/scsi_debug.c            |    5 ++---
 drivers/scsi/sym53c8xx_2/sym_glue.c  |    5 ++---
 23 files changed, 66 insertions(+), 64 deletions(-)

diff --git a/arch/ia64/hp/sim/simscsi.c b/arch/ia64/hp/sim/simscsi.c
index 7661bb0..c33c4b4 100644
--- a/arch/ia64/hp/sim/simscsi.c
+++ b/arch/ia64/hp/sim/simscsi.c
@@ -326,9 +326,13 @@ simscsi_queuecommand (struct scsi_cmnd *sc, void 
(*done)(struct scsi_cmnd *))
                }
        }
        if (sc->result == DID_BAD_TARGET) {
+               u8 sense_buffer[3];
                sc->result |= DRIVER_SENSE << 24;
-               sc->sense_buffer[0] = 0x70;
-               sc->sense_buffer[2] = 0x00;
+
+               sense_buffer[0] = 0x70;
+               sense_buffer[1] = 0;
+               sense_buffer[2] = 0x00;
+               scsi_eh_cpy_sense(sc, sense_buffer, sizeof(sense_buffer));
        }
        if (atomic_read(&num_reqs) >= SIMSCSI_REQ_QUEUE_LEN) {
                panic("Attempt to queue command while command is pending!!");
diff --git a/drivers/block/cciss_scsi.c b/drivers/block/cciss_scsi.c
index 63ee6c0..1ccd225 100644
--- a/drivers/block/cciss_scsi.c
+++ b/drivers/block/cciss_scsi.c
@@ -37,7 +37,8 @@
 
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_device.h>
-#include <scsi/scsi_host.h> 
+#include <scsi/scsi_host.h>
+#include <scsi/scsi_eh.h>
 
 #include "cciss_scsi.h"
 
@@ -579,10 +580,7 @@ complete_scsi_command( CommandList_struct *cp, int 
timeout, __u32 tag)
 
        /* copy the sense data whether we need to or not. */
 
-       memcpy(cmd->sense_buffer, ei->SenseInfo, 
-               ei->SenseLen > SCSI_SENSE_BUFFERSIZE ?
-                       SCSI_SENSE_BUFFERSIZE : 
-                       ei->SenseLen);
+       scsi_eh_cpy_sense(cmd, ei->SenseInfo, ei->SenseLen);
        scsi_set_resid(cmd, ei->ResidualCnt);
 
        if(ei->CommandStatus != 0) 
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c 
b/drivers/infiniband/ulp/srp/ib_srp.c
index 195ce7c..0437585 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -48,6 +48,7 @@
 #include <scsi/scsi_dbg.h>
 #include <scsi/srp.h>
 #include <scsi/scsi_transport_srp.h>
+#include <scsi/scsi_eh.h>
 
 #include <rdma/ib_cache.h>
 
@@ -798,10 +799,9 @@ static void srp_process_rsp(struct srp_target_port 
*target, struct srp_rsp *rsp)
                scmnd->result = rsp->status;
 
                if (rsp->flags & SRP_RSP_FLAG_SNSVALID) {
-                       memcpy(scmnd->sense_buffer, rsp->data +
+                       scsi_eh_cpy_sense(scmnd, rsp->data +
                               be32_to_cpu(rsp->resp_data_len),
-                              min_t(int, be32_to_cpu(rsp->sense_data_len),
-                                    SCSI_SENSE_BUFFERSIZE));
+                              be32_to_cpu(rsp->sense_data_len));
                }
 
                if (rsp->flags & (SRP_RSP_FLAG_DOOVER | SRP_RSP_FLAG_DOUNDER))
diff --git a/drivers/message/fusion/mptscsih.c 
b/drivers/message/fusion/mptscsih.c
index 5c614ec..8577fee 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -61,6 +61,7 @@
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_tcq.h>
 #include <scsi/scsi_dbg.h>
+#include <scsi/scsi_eh.h>
 
 #include "mptbase.h"
 #include "mptscsih.h"
@@ -606,9 +607,9 @@ mptscsih_info_scsiio(MPT_ADAPTER *ioc, struct scsi_cmnd 
*sc, SCSIIOReply_t * pSc
            pScsiReply->SCSIState);
 
        if (pScsiReply->SCSIState & MPI_SCSI_STATE_AUTOSENSE_VALID) {
-               skey = sc->sense_buffer[2] & 0x0F;
-               asc = sc->sense_buffer[12];
-               ascq = sc->sense_buffer[13];
+               skey = scsi_sense(sc)[2] & 0x0F;
+               asc = scsi_sense(sc)[12];
+               ascq = scsi_sense(sc)[13];
 
                printk(MYIOC_s_DEBUG_FMT "\t[sense_key,asc,ascq]: "
                    "[0x%02x,0x%02x,0x%02x]\n", ioc->name, skey, asc, ascq);
@@ -2501,7 +2502,7 @@ mptscsih_copy_sense_data(struct scsi_cmnd *sc, 
MPT_SCSI_HOST *hd, MPT_FRAME_HDR
                /* Copy the sense received into the scsi command block. */
                req_index = le16_to_cpu(mf->u.frame.hwhdr.msgctxu.fld.req_idx);
                sense_data = ((u8 *)ioc->sense_buf_pool + (req_index * 
MPT_SENSE_BUFFER_ALLOC));
-               memcpy(sc->sense_buffer, sense_data, SNS_LEN(sc));
+               scsi_eh_cpy_sense(sc, sense_data, MPT_SENSE_BUFFER_ALLOC);
 
                /* Log SMART data (asc = 0x5D, non-IM case only) if required.
                 */
diff --git a/drivers/message/i2o/i2o_scsi.c b/drivers/message/i2o/i2o_scsi.c
index 1bcdbbb..0d089d9 100644
--- a/drivers/message/i2o/i2o_scsi.c
+++ b/drivers/message/i2o/i2o_scsi.c
@@ -65,6 +65,7 @@
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_eh.h>
 #include <scsi/sg.h>
 
 #define OSM_NAME       "scsi-osm"
@@ -369,8 +370,7 @@ static int i2o_scsi_reply(struct i2o_controller *c, u32 m,
         * the SCSI layer handle the error
         */
        if (cmd->result)
-               memcpy(cmd->sense_buffer, &msg->body[3],
-                      min(SCSI_SENSE_BUFFERSIZE, 40));
+               scsi_eh_cpy_sense(cmd, &msg->body[3], 40);
 
        /* only output error code if AdapterStatus is not HBA_SUCCESS */
        if ((error >> 8) & 0xff)
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index b4912d1..a8614a3 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -91,6 +91,7 @@
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_tcq.h>
 #include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_eh.h>
 #include "3w-9xxx.h"
 
 /* Globals */
@@ -992,7 +993,9 @@ static int twa_fill_sense(TW_Device_Extension *tw_dev, int 
request_id, int copy_
        }
 
        if (copy_sense) {
-               memcpy(tw_dev->srb[request_id]->sense_buffer, 
full_command_packet->header.sense_data, TW_SENSE_DATA_LENGTH);
+               scsi_eh_cpy_sense(tw_dev->srb[request_id],
+                       full_command_packet->header.sense_data,
+                       TW_SENSE_DATA_LENGTH);
                tw_dev->srb[request_id]->result = 
(full_command_packet->command.newcommand.status << 1);
                retval = TW_ISR_DONT_RESULT;
                goto out;
diff --git a/drivers/scsi/a100u2w.c b/drivers/scsi/a100u2w.c
index 6335637..21b7079 100644
--- a/drivers/scsi/a100u2w.c
+++ b/drivers/scsi/a100u2w.c
@@ -79,6 +79,7 @@
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
+#include <scsi/scsi_eh.h>
 
 #include "a100u2w.h"
 
@@ -1028,8 +1029,7 @@ static void inia100_scb_handler(struct orc_host *host, 
struct orc_scb *scb)
        }
 
        if (scb->tastat == 2) { /* Check condition              */
-               memcpy((unsigned char *) &cmd->sense_buffer[0],
-                  (unsigned char *) &escb->sglist[0], SENSE_SIZE);
+               scsi_eh_cpy_sense(cmd, &escb->sglist[0], SENSE_SIZE);
        }
        cmd->result = scb->tastat | (scb->hastat << 16);
        scsi_dma_unmap(cmd);
diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c
index 190568e..023d9c1 100644
--- a/drivers/scsi/aha1542.c
+++ b/drivers/scsi/aha1542.c
@@ -535,8 +535,8 @@ static void aha1542_intr_handle(struct Scsi_Host *shost, 
void *dev_id)
                   Adaptec automatically fetches it, and there is no guarantee 
that
                   we will still have it in the cdb when we come back */
                if (ccb[mbo].tarstat == 2)
-                       memcpy(SCtmp->sense_buffer, 
&ccb[mbo].cdb[ccb[mbo].cdblen],
-                              SCSI_SENSE_BUFFERSIZE);
+                       scsi_eh_cpy_sense(SCtmp, &ccb[mbo].cdb[ccb[mbo].cdblen],
+                              ~0); /*FIXME: What is the card's max space here*/
 
 
                /* is there mail :-) */
diff --git a/drivers/scsi/aha1740.c b/drivers/scsi/aha1740.c
index 7c45d88..97f8fec 100644
--- a/drivers/scsi/aha1740.c
+++ b/drivers/scsi/aha1740.c
@@ -285,8 +285,8 @@ static irqreturn_t aha1740_intr_handle(int irq, void 
*dev_id)
                           guarantee that we will still have it in the
                           cdb when we come back */
                        if ( (adapstat & G2INTST_MASK) == G2INTST_CCBERROR ) {
-                               memcpy(SCtmp->sense_buffer, ecbptr->sense, 
-                                      SCSI_SENSE_BUFFERSIZE);
+                               scsi_eh_cpy_sense(SCtmp, ecbptr->sense,
+                                               sizeof(ecbptr->sense));
                                errstatus = 
aha1740_makecode(ecbptr->sense,ecbptr->status);
                        } else
                                errstatus = 0;
diff --git a/drivers/scsi/atp870u.c b/drivers/scsi/atp870u.c
index db6de5e..fb27f2c 100644
--- a/drivers/scsi/atp870u.c
+++ b/drivers/scsi/atp870u.c
@@ -613,7 +613,6 @@ static int atp870u_queuecommand(struct scsi_cmnd * req_p,
        struct Scsi_Host *host;
 
        c = scmd_channel(req_p);
-       req_p->sense_buffer[0]=0;
        scsi_set_resid(req_p, 0);
        if (scmd_channel(req_p) > 1) {
                req_p->result = 0x00040000;
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c
index 514f05b..464978e 100644
--- a/drivers/scsi/hptiop.c
+++ b/drivers/scsi/hptiop.c
@@ -34,6 +34,7 @@
 #include <scsi/scsi.h>
 #include <scsi/scsi_tcq.h>
 #include <scsi/scsi_host.h>
+#include <scsi/scsi_eh.h>
 
 #include "hptiop.h"
 
@@ -573,9 +574,8 @@ static void hptiop_finish_scsi_req(struct hptiop_hba *hba, 
u32 tag,
                scsi_set_resid(scp,
                        scsi_bufflen(scp) - le32_to_cpu(req->dataxfer_length));
                scp->result = SAM_STAT_CHECK_CONDITION;
-               memcpy(scp->sense_buffer, &req->sg_list,
-                               min_t(size_t, SCSI_SENSE_BUFFERSIZE,
-                                       le32_to_cpu(req->dataxfer_length)));
+               scsi_eh_cpy_sense(scp, &req->sg_list,
+                                       le32_to_cpu(req->dataxfer_length));
                break;
 
        default:
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index df9b865..4527657 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -688,9 +688,7 @@ static void handle_cmd_rsp(struct srp_event_struct 
*evt_struct)
        if (cmnd) {
                cmnd->result = rsp->status;
                if (((cmnd->result >> 1) & 0x1f) == CHECK_CONDITION)
-                       memcpy(cmnd->sense_buffer,
-                              rsp->data,
-                              rsp->sense_data_len);
+                       scsi_eh_cpy_sense(cmnd, rsp->data, rsp->sense_data_len);
                unmap_cmd_data(&evt_struct->iu.srp.cmd, 
                               evt_struct, 
                               evt_struct->hostdata->dev);
diff --git a/drivers/scsi/ibmvscsi/ibmvstgt.c b/drivers/scsi/ibmvscsi/ibmvstgt.c
index d63f11e..67bc6a6 100644
--- a/drivers/scsi/ibmvscsi/ibmvstgt.c
+++ b/drivers/scsi/ibmvscsi/ibmvstgt.c
@@ -166,7 +166,7 @@ static int send_rsp(struct iu_entry *iue, struct scsi_cmnd 
*sc,
                if (sc) {
                        iu->srp.rsp.flags |= SRP_RSP_FLAG_SNSVALID;
                        iu->srp.rsp.sense_data_len = SCSI_SENSE_BUFFERSIZE;
-                       memcpy(sense, sc->sense_buffer, SCSI_SENSE_BUFFERSIZE);
+                       memcpy(sense, scsi_sense(sc), SCSI_SENSE_BUFFERSIZE);
                } else {
                        iu->srp.rsp.status = SAM_STAT_CHECK_CONDITION;
                        iu->srp.rsp.flags |= SRP_RSP_FLAG_SNSVALID;
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
index 5ed0006..b40ff82 100644
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -57,6 +57,7 @@
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_tcq.h>
 #include <scsi/sg.h>
+#include <scsi/scsi_eh.h>
 
 #define IDESCSI_DEBUG_LOG              0
 
@@ -333,7 +334,8 @@ static int idescsi_end_request (ide_drive_t *drive, int 
uptodate, int nrsecs)
                        printk ("ide-scsi: %s: wrap up check %lu, rst = ", 
drive->name, opc->scsi_cmd->serial_number);
                        ide_scsi_hex_dump(pc->buffer, 16);
                }
-               memcpy((void *) opc->scsi_cmd->sense_buffer, pc->buffer, 
SCSI_SENSE_BUFFERSIZE);
+               scsi_eh_cpy_sense(opc->scsi_cmd, pc->buffer,
+                               SCSI_SENSE_BUFFERSIZE);
                kfree(pc->buffer);
                kfree(pc);
                kfree(rq);
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 1148793..c7f416e 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -513,10 +513,8 @@ invalid_datalen:
                if (datalen < senselen)
                        goto invalid_datalen;
 
-               memcpy(sc->sense_buffer, data + 2,
-                      min_t(uint16_t, senselen, SCSI_SENSE_BUFFERSIZE));
-               debug_scsi("copied %d bytes of sense\n",
-                          min_t(uint16_t, senselen, SCSI_SENSE_BUFFERSIZE));
+               scsi_eh_cpy_sense(sc, data + 2, senselen);
+               debug_scsi("copied %d bytes of sense\n", senselen);
        }
 
        if (scsi_bidi_cmnd(sc) &&
diff --git a/drivers/scsi/libsas/sas_scsi_host.c 
b/drivers/scsi/libsas/sas_scsi_host.c
index f869fba..0be8ade 100644
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -107,8 +107,7 @@ static void sas_scsi_task_done(struct sas_task *task)
                        hs = DID_ABORT;
                        break;
                case SAM_CHECK_COND:
-                       memcpy(sc->sense_buffer, ts->buf,
-                              min(SCSI_SENSE_BUFFERSIZE, ts->buf_valid_size));
+                       scsi_eh_cpy_sense(sc, ts->buf, ts->buf_valid_size);
                        stat = SAM_CHECK_COND;
                        break;
                default:
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index fc5c3a4..6eab521 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -28,6 +28,7 @@
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_tcq.h>
 #include <scsi/scsi_transport_fc.h>
+#include <scsi/scsi_eh.h>
 
 #include "lpfc_version.h"
 #include "lpfc_hw.h"
@@ -424,14 +425,12 @@ lpfc_handle_fcp_err(struct lpfc_vport *vport, struct 
lpfc_scsi_buf *lpfc_cmd,
 
        if ((resp_info & SNS_LEN_VALID) && fcprsp->rspSnsLen) {
                uint32_t snslen = be32_to_cpu(fcprsp->rspSnsLen);
-               if (snslen > SCSI_SENSE_BUFFERSIZE)
-                       snslen = SCSI_SENSE_BUFFERSIZE;
 
                if (resp_info & RSP_LEN_VALID)
                  rsplen = be32_to_cpu(fcprsp->rspRspLen);
-               memcpy(cmnd->sense_buffer, &fcprsp->rspInfo0 + rsplen, snslen);
+               scsi_eh_cpy_sense(cmnd, &fcprsp->rspInfo0 + rsplen, snslen);
        }
-       lp = (uint32_t *)cmnd->sense_buffer;
+       lp = (uint32_t *)scsi_sense(cmnd);
 
        if (!scsi_status && (resp_info & RESID_UNDER))
                logit = LOG_FCP;
@@ -593,7 +592,7 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct 
lpfc_iocbq *pIocbIn,
        }
 
        if (cmd->result || lpfc_cmd->fcp_rsp->rspSnsLen) {
-               uint32_t *lp = (uint32_t *)cmd->sense_buffer;
+               const uint32_t *lp = (const uint32_t *)scsi_sense(cmd);
 
                lpfc_printf_vlog(vport, KERN_INFO, LOG_FCP,
                                 "0710 Iodone <%d/%d> cmd %p, error "
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 4d59ae8..564bc4d 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -1572,8 +1572,7 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int 
nstatus, int status)
                        if( mbox->m_out.cmd == MEGA_MBOXCMD_PASSTHRU ||
                                mbox->m_out.cmd == MEGA_MBOXCMD_PASSTHRU64 ) {
 
-                               memcpy(cmd->sense_buffer, pthru->reqsensearea,
-                                               14);
+                               scsi_eh_cpy_sense(cmd, pthru->reqsensearea, 14);
 
                                cmd->result = (DRIVER_SENSE << 24) |
                                        (DID_OK << 16) |
@@ -1582,15 +1581,20 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int 
nstatus, int status)
                        else {
                                if (mbox->m_out.cmd == MEGA_MBOXCMD_EXTPTHRU) {
 
-                                       memcpy(cmd->sense_buffer,
+                                       scsi_eh_cpy_sense(cmd,
                                                epthru->reqsensearea, 14);
 
                                        cmd->result = (DRIVER_SENSE << 24) |
                                                (DID_OK << 16) |
                                                (CHECK_CONDITION << 1);
                                } else {
-                                       cmd->sense_buffer[0] = 0x70;
-                                       cmd->sense_buffer[2] = ABORTED_COMMAND;
+                                       u8 sense[4];
+
+                                       memset(sense, 0, sizeof(sense));
+                                       sense[0] = 0x70;
+                                       sense[2] = ABORTED_COMMAND;
+                                       scsi_eh_cpy_sense(cmd, sense,
+                                                         sizeof(sense));
                                        cmd->result |= (CHECK_CONDITION << 1);
                                }
                        }
diff --git a/drivers/scsi/megaraid/megaraid_sas.c 
b/drivers/scsi/megaraid/megaraid_sas.c
index 672c759..2caedef 100644
--- a/drivers/scsi/megaraid/megaraid_sas.c
+++ b/drivers/scsi/megaraid/megaraid_sas.c
@@ -45,6 +45,8 @@
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_host.h>
+#include <scsi/scsi_eh.h>
+
 #include "megaraid_sas.h"
 
 /*
@@ -1309,9 +1311,7 @@ megasas_complete_cmd(struct megasas_instance *instance, 
struct megasas_cmd *cmd,
                        cmd->scmd->result = (DID_OK << 16) | hdr->scsi_status;
 
                        if (hdr->scsi_status == SAM_STAT_CHECK_CONDITION) {
-                               memset(cmd->scmd->sense_buffer, 0,
-                                      SCSI_SENSE_BUFFERSIZE);
-                               memcpy(cmd->scmd->sense_buffer, cmd->sense,
+                               scsi_eh_cpy_sense(cmd->scmd, cmd->sense,
                                       hdr->sense_len);
 
                                cmd->scmd->result |= DRIVER_SENSE << 24;
diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c
index c5ebf01..89a38c2 100644
--- a/drivers/scsi/ncr53c8xx.c
+++ b/drivers/scsi/ncr53c8xx.c
@@ -123,6 +123,7 @@
 #include <scsi/scsi_tcq.h>
 #include <scsi/scsi_transport.h>
 #include <scsi/scsi_transport_spi.h>
+#include <scsi/scsi_eh.h>
 
 #include "ncr53c8xx.h"
 
@@ -4962,12 +4963,10 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
                /*
                **      Copy back sense data to caller's buffer.
                */
-               memcpy(cmd->sense_buffer, cp->sense_buf,
-                      min_t(size_t, SCSI_SENSE_BUFFERSIZE,
-                            sizeof(cp->sense_buf)));
+               scsi_eh_cpy_sense(cmd, cp->sense_buf, sizeof(cp->sense_buf));
 
                if (DEBUG_FLAGS & (DEBUG_RESULT|DEBUG_TINY)) {
-                       u_char *p = cmd->sense_buffer;
+                       u_char *p = cp->sense_buf;
                        int i;
                        PRINT_ADDR(cmd, "sense data:");
                        for (i=0; i<14; i++) printk (" %x", *p++);
@@ -5040,7 +5039,7 @@ void ncr_complete (struct ncb *np, struct ccb *cp)
                                break;
                        case S_CHECK_COND:
                                printk ("  SENSE:");
-                               p = (u_char*) &cmd->sense_buffer;
+                               p = (u_char *)scsi_sense(cmd);
                                for (i=0; i<14; i++)
                                        printk (" %x", *p++);
                                break;
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index 65455ab..ed94c89 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -1141,8 +1141,8 @@ static struct scsi_cmnd *qlogicpti_intr_handler(struct 
qlogicpti *qpti)
                        qpti->send_marker = 1;
 
                if (sts->state_flags & SF_GOT_SENSE)
-                       memcpy(Cmnd->sense_buffer, sts->req_sense_data,
-                              SCSI_SENSE_BUFFERSIZE);
+                       scsi_eh_cpy_sense(Cmnd, sts->req_sense_data,
+                              sizeof(sts->req_sense_data));
 
                if (sts->hdr.entry_type == ENTRY_STATUS)
                        Cmnd->result =
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 1541c17..017989d 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -2379,9 +2379,8 @@ static int schedule_resp(struct scsi_cmnd * cmnd,
        if (cmnd && devip) {
                /* simulate autosense by this driver */
                if (SAM_STAT_CHECK_CONDITION == (scsi_result & 0xff))
-                       memcpy(cmnd->sense_buffer, devip->sense_buff,
-                              (SCSI_SENSE_BUFFERSIZE > SDEBUG_SENSE_LEN) ?
-                              SDEBUG_SENSE_LEN : SCSI_SENSE_BUFFERSIZE);
+                       scsi_eh_cpy_sense(cmnd, devip->sense_buff,
+                                         SDEBUG_SENSE_LEN);
        }
        if (delta_jiff <= 0) {
                if (cmnd)
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c 
b/drivers/scsi/sym53c8xx_2/sym_glue.c
index d39107b..e8de740 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -46,6 +46,7 @@
 #include <scsi/scsi_tcq.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_transport.h>
+#include <scsi/scsi_eh.h>
 
 #include "sym_glue.h"
 #include "sym_nvram.h"
@@ -207,9 +208,7 @@ void sym_set_cam_result_error(struct sym_hcb *np, struct 
sym_ccb *cp, int resid)
                        /*
                         *  Bounce back the sense data to user.
                         */
-                       memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
-                       memcpy(cmd->sense_buffer, cp->sns_bbuf,
-                              min(SCSI_SENSE_BUFFERSIZE, SYM_SNS_BBUF_LEN));
+                       scsi_eh_cpy_sense(cmd, cp->sns_bbuf, SYM_SNS_BBUF_LEN);
 #if 0
                        /*
                         *  If the device reports a UNIT ATTENTION condition 
-- 
1.5.3.3

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to