}
        memcpy(&io_task->cmd_bhs->iscsi_data_pdu.
               dw[offsetof(struct amap_pdu_data_out, lun) / 32],
-              io_task->cmd_bhs->iscsi_hdr.lun, sizeof(struct scsi_lun));
+              &io_task->cmd_bhs->iscsi_hdr.lun, sizeof(struct scsi_lun));
 
        AMAP_SET_BITS(struct amap_iscsi_wrb, lun, pwrb,
-                     cpu_to_be16((unsigned short)io_task->cmd_bhs->iscsi_hdr.
-                                 lun[0]));
+                     cpu_to_be16(*(unsigned short *)&io_task->cmd_bhs->iscsi_hdr.lun));
        AMAP_SET_BITS(struct amap_iscsi_wrb, r2t_exp_dtl, pwrb, xferlen);
        AMAP_SET_BITS(struct amap_iscsi_wrb, wrb_idx, pwrb,
                      io_task->pwrb_handle->wrb_index);
 
        default:
                tmfabort_wqe->ref_itt = RESERVED_ITT;
        }
-       memcpy(scsi_lun, tmfabort_hdr->lun, sizeof(struct scsi_lun));
+       memcpy(scsi_lun, &tmfabort_hdr->lun, sizeof(struct scsi_lun));
        tmfabort_wqe->lun[0] = be32_to_cpu(scsi_lun[0]);
        tmfabort_wqe->lun[1] = be32_to_cpu(scsi_lun[1]);
 
 
        nopout_wqe->op_code = nopout_hdr->opcode;
        nopout_wqe->op_attr = ISCSI_FLAG_CMD_FINAL;
-       memcpy(nopout_wqe->lun, nopout_hdr->lun, 8);
+       memcpy(nopout_wqe->lun, &nopout_hdr->lun, 8);
 
        if (test_bit(BNX2I_NX2_DEV_57710, &ep->hba->cnic_dev_type)) {
                u32 tmp = nopout_wqe->lun[0];
                hdr->flags = ISCSI_FLAG_CMD_FINAL;
                hdr->itt = task->hdr->itt;
                hdr->ttt = cpu_to_be32(nop_in->ttt);
-               memcpy(hdr->lun, nop_in->lun, 8);
+               memcpy(&hdr->lun, nop_in->lun, 8);
        }
 done:
        __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr, NULL, 0);
        resp_hdr->opcode = async_cqe->op_code;
        resp_hdr->flags = 0x80;
 
-       memcpy(resp_hdr->lun, async_cqe->lun, 8);
+       memcpy(&resp_hdr->lun, async_cqe->lun, 8);
        resp_hdr->exp_cmdsn = cpu_to_be32(async_cqe->exp_cmd_sn);
        resp_hdr->max_cmdsn = cpu_to_be32(async_cqe->max_cmd_sn);
 
 
        hdr->datasn = cpu_to_be32(r2t->datasn);
        r2t->datasn++;
        hdr->opcode = ISCSI_OP_SCSI_DATA_OUT;
-       memcpy(hdr->lun, task->lun, sizeof(hdr->lun));
+       hdr->lun = task->lun;
        hdr->itt = task->hdr_itt;
        hdr->exp_statsn = r2t->exp_statsn;
        hdr->offset = cpu_to_be32(r2t->data_offset + r2t->sent);
                /*
                 * Allow PDUs for unrelated LUNs
                 */
-               hdr_lun = scsilun_to_int((struct scsi_lun *)tmf->lun);
+               hdr_lun = scsilun_to_int(&tmf->lun);
                if (hdr_lun != task->sc->device->lun)
                        return 0;
                /* fall through */
                return rc;
        hdr->opcode = ISCSI_OP_SCSI_CMD;
        hdr->flags = ISCSI_ATTR_SIMPLE;
-       int_to_scsilun(sc->device->lun, (struct scsi_lun *)hdr->lun);
-       memcpy(task->lun, hdr->lun, sizeof(task->lun));
+       int_to_scsilun(sc->device->lun, &hdr->lun);
+       task->lun = hdr->lun;
        hdr->exp_statsn = cpu_to_be32(conn->exp_statsn);
        cmd_len = sc->cmd_len;
        if (cmd_len < ISCSI_CDB_SIZE)
        hdr.flags = ISCSI_FLAG_CMD_FINAL;
 
        if (rhdr) {
-               memcpy(hdr.lun, rhdr->lun, 8);
+               hdr.lun = rhdr->lun;
                hdr.ttt = rhdr->ttt;
                hdr.itt = RESERVED_ITT;
        } else
        hdr->opcode = ISCSI_OP_SCSI_TMFUNC | ISCSI_OP_IMMEDIATE;
        hdr->flags = ISCSI_TM_FUNC_ABORT_TASK & ISCSI_FLAG_TM_FUNC_MASK;
        hdr->flags |= ISCSI_FLAG_CMD_FINAL;
-       memcpy(hdr->lun, task->lun, sizeof(hdr->lun));
+       hdr->lun = task->lun;
        hdr->rtt = task->hdr_itt;
        hdr->refcmdsn = task->cmdsn;
 }
        hdr->opcode = ISCSI_OP_SCSI_TMFUNC | ISCSI_OP_IMMEDIATE;
        hdr->flags = ISCSI_TM_FUNC_LOGICAL_UNIT_RESET & ISCSI_FLAG_TM_FUNC_MASK;
        hdr->flags |= ISCSI_FLAG_CMD_FINAL;
-       int_to_scsilun(sc->device->lun, (struct scsi_lun *)hdr->lun);
+       int_to_scsilun(sc->device->lun, &hdr->lun);
        hdr->rtt = RESERVED_ITT;
 }
 
 
        uint8_t         rsvd2[2];
        uint8_t         hlength;        /* AHSs total length */
        uint8_t         dlength[3];     /* Data length */
-       uint8_t         lun[8];
+       struct scsi_lun lun;
        itt_t           itt;            /* Initiator Task Tag, opaque for target */
        __be32          ttt;            /* Target Task Tag */
        __be32          statsn;
        __be16 rsvd2;
        uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        __be32 data_length;
        __be32 cmdsn;
        uint8_t rsvd2[2];
        uint8_t rsvd3;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        uint8_t rsvd4[8];
        __be32  statsn;
        __be32  exp_cmdsn;
        __be16  rsvd2;
        uint8_t rsvd3;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  cmdsn;
        __be16  rsvd2;
        uint8_t rsvd3;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  statsn;
        uint8_t rsvd1[2];
        uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        itt_t    rtt;   /* Reference Task Tag */
        __be32  cmdsn;
        uint8_t rsvd2[2];
        uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;   /* Initiator Task Tag */
        __be32  ttt;    /* Target Transfer Tag */
        __be32  statsn;
        uint8_t rsvd2[2];
        uint8_t rsvd3;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;
        __be32  ttt;
        __be32  rsvd4;
        uint8_t cmd_status;
        uint8_t hlength;
        uint8_t dlength[3];
-       uint8_t lun[8];
+       struct scsi_lun lun;
        itt_t    itt;
        __be32  ttt;
        __be32  statsn;
 
        /* copied values in case we need to send tmfs */
        itt_t                   hdr_itt;
        __be32                  cmdsn;
-       uint8_t                 lun[8];
+       struct scsi_lun         lun;
 
        int                     itt;            /* this ITT */