]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blobdiff - releases/4.9.175/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch
Linux 4.9.175
[thirdparty/kernel/stable-queue.git] / releases / 4.9.175 / scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch
diff --git a/releases/4.9.175/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch b/releases/4.9.175/scsi-csiostor-fix-missing-data-copy-in-csio_scsi_err.patch
new file mode 100644 (file)
index 0000000..ae6bf3a
--- /dev/null
@@ -0,0 +1,38 @@
+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
+