aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi
diff options
context:
space:
mode:
authorMartin K. Petersen <martin.petersen@oracle.com>2013-10-23 06:25:40 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-12-12 01:36:28 -0500
commit8562d028775e7c88fc7fa8c5deaa791392892778 (patch)
tree8b40e1f29bf66978ef17364bc583f74d3a5fc614 /include/scsi
parent5e43e33a63d72c6bd30f9fa14a9e82ffb58be422 (diff)
SCSI: Disable WRITE SAME for RAID and virtual host adapter drivers
commit 54b2b50c20a61b51199bedb6e5d2f8ec2568fb43 upstream. Some host adapters do not pass commands through to the target disk directly. Instead they provide an emulated target which may or may not accurately report its capabilities. In some cases the physical device characteristics are reported even when the host adapter is processing commands on the device's behalf. This can lead to adapter firmware hangs or excessive I/O errors. This patch disables WRITE SAME for devices connected to host adapters that provide an emulated target. Driver writers can disable WRITE SAME by setting the no_write_same flag in the host adapter template. [jejb: fix up rejections due to eh_deadline patch] Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include/scsi')
-rw-r--r--include/scsi/scsi_host.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 755243572219..50769a72166b 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -475,6 +475,9 @@ struct scsi_host_template {
475 */ 475 */
476 unsigned ordered_tag:1; 476 unsigned ordered_tag:1;
477 477
478 /* True if the controller does not support WRITE SAME */
479 unsigned no_write_same:1;
480
478 /* 481 /*
479 * Countdown for host blocking with no commands outstanding. 482 * Countdown for host blocking with no commands outstanding.
480 */ 483 */
@@ -674,6 +677,9 @@ struct Scsi_Host {
674 /* Don't resume host in EH */ 677 /* Don't resume host in EH */
675 unsigned eh_noresume:1; 678 unsigned eh_noresume:1;
676 679
680 /* The controller does not support WRITE SAME */
681 unsigned no_write_same:1;
682
677 /* 683 /*
678 * Optional work queue to be utilized by the transport 684 * Optional work queue to be utilized by the transport
679 */ 685 */