On Tue, 2012-09-18 at 15:10 -0700, Roland Dreier wrote: > From: Roland Dreier <roland@xxxxxxxxxxxxxxx> > > The qla2xxx firmware actually expects the task management response > code in a CTIO IOCB with SCSI status mode 1 to be in little-endian > byte order, ie the response code should be the first byte in the > sense_data[] array. Is this also true on Big Endian Hardware? Because the fix you have assumes that the TIO IOCB with SCSI status mode 1 should be CPU endian ... that doesn't look right since this is passed directly over the PCI bus (and the PCI bus is little endian), so shouldn't the correct fix be to replace cpu_to_be32 with cpu_to_le32? James > The old code erroneously byte-swapped the > response code, which puts it in the wrong place on the wire and leads > to initiators thinking every task management request succeeds (since > they see 0 in the byte where they look for the response code). > > Cc: Chad Dupuis <chad.dupuis@xxxxxxxxxx> > Cc: Arun Easi <arun.easi@xxxxxxxxxx> > Signed-off-by: Roland Dreier <roland@xxxxxxxxxxxxxxx> > --- > drivers/scsi/qla2xxx/qla_target.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c > index 5b30132..41b74ba 100644 > --- a/drivers/scsi/qla2xxx/qla_target.c > +++ b/drivers/scsi/qla2xxx/qla_target.c > @@ -1403,7 +1403,7 @@ static void qlt_24xx_send_task_mgmt_ctio(struct scsi_qla_host *ha, > ctio->u.status1.scsi_status = > __constant_cpu_to_le16(SS_RESPONSE_INFO_LEN_VALID); > ctio->u.status1.response_len = __constant_cpu_to_le16(8); > - ((uint32_t *)ctio->u.status1.sense_data)[0] = cpu_to_be32(resp_code); > + ctio->u.status1.sense_data[0] = resp_code; > > qla2x00_start_iocbs(ha, ha->req); > } -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html