| From 0faafd0fd64eab5a63fc0a4d26eb7a56397c9ca5 Mon Sep 17 00:00:00 2001 |
| From: Varun Prakash <varun@chelsio.com> |
| Date: Fri, 5 Apr 2019 20:39:13 +0530 |
| Subject: scsi: csiostor: fix missing data copy in csio_scsi_err_handler() |
| |
| [ Upstream commit 5c2442fd78998af60e13aba506d103f7f43f8701 ] |
| |
| If scsi cmd sglist is not suitable for DDP then csiostor driver uses |
| preallocated buffers for DDP, because of this data copy is required from |
| DDP buffer to scsi cmd sglist before calling ->scsi_done(). |
| |
| Signed-off-by: Varun Prakash <varun@chelsio.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/csiostor/csio_scsi.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c |
| index 89a52b941ea8d..894d97e4ace51 100644 |
| --- a/drivers/scsi/csiostor/csio_scsi.c |
| +++ b/drivers/scsi/csiostor/csio_scsi.c |
| @@ -1713,8 +1713,11 @@ csio_scsi_err_handler(struct csio_hw *hw, struct csio_ioreq *req) |
| } |
| |
| out: |
| - if (req->nsge > 0) |
| + if (req->nsge > 0) { |
| scsi_dma_unmap(cmnd); |
| + if (req->dcopy && (host_status == DID_OK)) |
| + host_status = csio_scsi_copy_to_sgl(hw, req); |
| + } |
| |
| cmnd->result = (((host_status) << 16) | scsi_status); |
| cmnd->scsi_done(cmnd); |
| -- |
| 2.20.1 |
| |