diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 9075cfa..50a1d79 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c @@ -362,7 +362,8 @@ static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task) struct iscsi_cmd *hdr; unsigned hdrlength, cmd_len; itt_t itt; - int rc; + int rc, i; + struct scatterlist *sg; rc = iscsi_check_tmf_restrictions(task, ISCSI_OP_SCSI_CMD); if (rc) @@ -479,15 +480,19 @@ static int iscsi_prep_scsi_cmd_pdu(struct iscsi_task *task) session->cmdsn++; conn->scsicmd_pdus_cnt++; - ISCSI_DBG_SESSION(session, "iscsi prep [%s cid %d sc %p cdb 0x%x " - "itt 0x%x len %d bidi_len %d cmdsn %d win %d]\n", + printk(KERN_ERR "iscsi prep [%s cid %d sc %p cdb 0x%x " + "itt 0x%x len %d sg count %d bidi_len %d cmdsn %d win %d]\n", scsi_bidi_cmnd(sc) ? "bidirectional" : sc->sc_data_direction == DMA_TO_DEVICE ? "write" : "read", conn->id, sc, sc->cmnd[0], - task->itt, scsi_bufflen(sc), + task->itt, scsi_bufflen(sc), scsi_sg_count(sc), scsi_bidi_cmnd(sc) ? scsi_in(sc)->length : 0, session->cmdsn, session->max_cmdsn - session->exp_cmdsn + 1); + + scsi_for_each_sg(sc, sg, scsi_sg_count(sc), i) + printk(KERN_ERR "%d sg %p %u %u\n", i, sg, sg->offset, sg->length); + return 0; } diff --git a/drivers/scsi/libiscsi_tcp.c b/drivers/scsi/libiscsi_tcp.c index e0ea92c..240f2d2 100644 --- a/drivers/scsi/libiscsi_tcp.c +++ b/drivers/scsi/libiscsi_tcp.c @@ -95,6 +95,12 @@ static inline void iscsi_tcp_segment_init_sg(struct iscsi_segment *segment, struct scatterlist *sg, unsigned int offset) { + if (!sg) { + printk(KERN_ERR "Bad! offset %u size %u copied %u\n", + offset, segment->total_size, segment->total_copied); + return; + } + segment->sg = sg; segment->sg_offset = offset; segment->size = min(sg->length - offset,