diff options
Diffstat (limited to 'drivers/scsi/qla4xxx/ql4_os.c')
-rw-r--r-- | drivers/scsi/qla4xxx/ql4_os.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index 8ed3e2fc158..fca3d2b9665 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -1272,7 +1272,7 @@ static int qla4xxx_alloc_pdu(struct iscsi_task *task, uint8_t opcode) DEBUG2(ql4_printk(KERN_INFO, ha, "%s: MaxRecvLen %u, iscsi hrd %d\n", __func__, task->conn->max_recv_dlength, hdr_len)); - task_data->resp_len = task->conn->max_recv_dlength; + task_data->resp_len = task->conn->max_recv_dlength + hdr_len; task_data->resp_buffer = dma_alloc_coherent(&ha->pdev->dev, task_data->resp_len, &task_data->resp_dma, @@ -1280,8 +1280,9 @@ static int qla4xxx_alloc_pdu(struct iscsi_task *task, uint8_t opcode) if (!task_data->resp_buffer) goto exit_alloc_pdu; + task_data->req_len = task->data_count + hdr_len; task_data->req_buffer = dma_alloc_coherent(&ha->pdev->dev, - task->data_count + hdr_len, + task_data->req_len, &task_data->req_dma, GFP_ATOMIC); if (!task_data->req_buffer) @@ -1299,7 +1300,7 @@ exit_alloc_pdu: task_data->resp_buffer, task_data->resp_dma); if (task_data->req_buffer) - dma_free_coherent(&ha->pdev->dev, task->data_count + hdr_len, + dma_free_coherent(&ha->pdev->dev, task_data->req_len, task_data->req_buffer, task_data->req_dma); return -ENOMEM; } @@ -1328,7 +1329,7 @@ static void qla4xxx_task_cleanup(struct iscsi_task *task) dma_free_coherent(&ha->pdev->dev, task_data->resp_len, task_data->resp_buffer, task_data->resp_dma); - dma_free_coherent(&ha->pdev->dev, task->data_count + hdr_len, + dma_free_coherent(&ha->pdev->dev, task_data->req_len, task_data->req_buffer, task_data->req_dma); return; } |