aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Bellinger <nab@linux-iscsi.org>2013-10-24 03:10:36 -0400
committerNicholas Bellinger <nab@linux-iscsi.org>2013-10-24 03:28:08 -0400
commit366bda191c344ec4d7a5b908cf047bc09639ad3d (patch)
tree8a6140f7dd9b5352810d77904182ef546e5e36ea
parent0a66614b937c4cfe98c68613259367bf402f368b (diff)
target: Add missing XCOPY I/O operation sense_buffer
This patch adds the missing xcopy_pt_cmd->sense_buffer[] required for correctly handling CHECK_CONDITION exceptions within the locally generated XCOPY I/O path. Also update target_xcopy_read_source() + target_xcopy_setup_pt_cmd() to pass this buffer into transport_init_se_cmd() to correctly setup se_cmd->sense_buffer. Reported-by: Thomas Glanzmann <thomas@glanzmann.de> Reported-by: Douglas Gilbert <dgilbert@interlog.com> Cc: Thomas Glanzmann <thomas@glanzmann.de> Cc: Douglas Gilbert <dgilbert@interlog.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
-rw-r--r--drivers/target/target_core_xcopy.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/target/target_core_xcopy.c b/drivers/target/target_core_xcopy.c
index eeeaf99387ce..5edcd2bebee8 100644
--- a/drivers/target/target_core_xcopy.c
+++ b/drivers/target/target_core_xcopy.c
@@ -360,6 +360,7 @@ struct xcopy_pt_cmd {
360 struct se_cmd se_cmd; 360 struct se_cmd se_cmd;
361 struct xcopy_op *xcopy_op; 361 struct xcopy_op *xcopy_op;
362 struct completion xpt_passthrough_sem; 362 struct completion xpt_passthrough_sem;
363 unsigned char sense_buffer[TRANSPORT_SENSE_BUFFER];
363}; 364};
364 365
365static struct se_port xcopy_pt_port; 366static struct se_port xcopy_pt_port;
@@ -711,7 +712,7 @@ static int target_xcopy_read_source(
711 (unsigned long long)src_lba, src_sectors, length); 712 (unsigned long long)src_lba, src_sectors, length);
712 713
713 transport_init_se_cmd(se_cmd, &xcopy_pt_tfo, NULL, length, 714 transport_init_se_cmd(se_cmd, &xcopy_pt_tfo, NULL, length,
714 DMA_FROM_DEVICE, 0, NULL); 715 DMA_FROM_DEVICE, 0, &xpt_cmd->sense_buffer[0]);
715 xop->src_pt_cmd = xpt_cmd; 716 xop->src_pt_cmd = xpt_cmd;
716 717
717 rc = target_xcopy_setup_pt_cmd(xpt_cmd, xop, src_dev, &cdb[0], 718 rc = target_xcopy_setup_pt_cmd(xpt_cmd, xop, src_dev, &cdb[0],
@@ -771,7 +772,7 @@ static int target_xcopy_write_destination(
771 (unsigned long long)dst_lba, dst_sectors, length); 772 (unsigned long long)dst_lba, dst_sectors, length);
772 773
773 transport_init_se_cmd(se_cmd, &xcopy_pt_tfo, NULL, length, 774 transport_init_se_cmd(se_cmd, &xcopy_pt_tfo, NULL, length,
774 DMA_TO_DEVICE, 0, NULL); 775 DMA_TO_DEVICE, 0, &xpt_cmd->sense_buffer[0]);
775 xop->dst_pt_cmd = xpt_cmd; 776 xop->dst_pt_cmd = xpt_cmd;
776 777
777 rc = target_xcopy_setup_pt_cmd(xpt_cmd, xop, dst_dev, &cdb[0], 778 rc = target_xcopy_setup_pt_cmd(xpt_cmd, xop, dst_dev, &cdb[0],