* [PATCH 2/5] sd: Allow protection_type to be overridden
2012-08-28 18:29 [PATCH 1/5] sd: Avoid remapping bad reference tags Martin K. Petersen
@ 2012-08-28 18:29 ` Martin K. Petersen
2012-08-28 18:29 ` [PATCH 3/5] scsi: Disable DIF on Hitachi Ultrastar 15K300 Martin K. Petersen
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Martin K. Petersen @ 2012-08-28 18:29 UTC (permalink / raw)
To: linux-scsi; +Cc: James.Bottomley, Martin K. Petersen
From: "Martin K. Petersen" <martin.petersen@oracle.com>
We have encountered a few devices that misbehaved when operating in T10
PI mode. Allow T10 PI protection type to be overridden from userland.
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
---
drivers/scsi/sd.c | 25 ++++++++++++++++++++++++-
1 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 9f7fc39..e04c302 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -262,6 +262,28 @@ sd_show_protection_type(struct device *dev, struct device_attribute *attr,
}
static ssize_t
+sd_store_protection_type(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct scsi_disk *sdkp = to_scsi_disk(dev);
+ unsigned int val;
+ int err;
+
+ if (!capable(CAP_SYS_ADMIN))
+ return -EACCES;
+
+ err = kstrtouint(buf, 10, &val);
+
+ if (err)
+ return err;
+
+ if (val >= 0 && val <= SD_DIF_TYPE3_PROTECTION)
+ sdkp->protection_type = val;
+
+ return count;
+}
+
+static ssize_t
sd_show_protection_mode(struct device *dev, struct device_attribute *attr,
char *buf)
{
@@ -381,7 +403,8 @@ static struct device_attribute sd_disk_attrs[] = {
sd_store_allow_restart),
__ATTR(manage_start_stop, S_IRUGO|S_IWUSR, sd_show_manage_start_stop,
sd_store_manage_start_stop),
- __ATTR(protection_type, S_IRUGO, sd_show_protection_type, NULL),
+ __ATTR(protection_type, S_IRUGO|S_IWUSR, sd_show_protection_type,
+ sd_store_protection_type),
__ATTR(protection_mode, S_IRUGO, sd_show_protection_mode, NULL),
__ATTR(app_tag_own, S_IRUGO, sd_show_app_tag_own, NULL),
__ATTR(thin_provisioning, S_IRUGO, sd_show_thin_provisioning, NULL),
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/5] scsi: Disable DIF on Hitachi Ultrastar 15K300
2012-08-28 18:29 [PATCH 1/5] sd: Avoid remapping bad reference tags Martin K. Petersen
2012-08-28 18:29 ` [PATCH 2/5] sd: Allow protection_type to be overridden Martin K. Petersen
@ 2012-08-28 18:29 ` Martin K. Petersen
2012-08-28 18:29 ` [PATCH 4/5] mpt2sas: Return the correct sense key for DIF errors Martin K. Petersen
2012-08-28 18:29 ` [PATCH 5/5] mpt2sas: Add a module parameter that permits overriding protection capabilities Martin K. Petersen
3 siblings, 0 replies; 7+ messages in thread
From: Martin K. Petersen @ 2012-08-28 18:29 UTC (permalink / raw)
To: linux-scsi; +Cc: James.Bottomley, Martin K. Petersen
From: "Martin K. Petersen" <martin.petersen@oracle.com>
Hitachi Ultrastar 15K300 is quirky. Disable T10 PI (DIF).
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
---
drivers/scsi/scsi_devinfo.c | 1 +
drivers/scsi/scsi_scan.c | 3 +++
include/scsi/scsi_device.h | 4 ++++
include/scsi/scsi_devinfo.h | 1 +
4 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index cf8dfab..43fca91 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -172,6 +172,7 @@ static struct {
{"HITACHI", "DF400", "*", BLIST_REPORTLUN2},
{"HITACHI", "DF500", "*", BLIST_REPORTLUN2},
{"HITACHI", "DISK-SUBSYSTEM", "*", BLIST_REPORTLUN2},
+ {"HITACHI", "HUS1530", "*", BLIST_NO_DIF},
{"HITACHI", "OPEN-", "*", BLIST_REPORTLUN2},
{"HITACHI", "OP-C-", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
{"HITACHI", "3380-", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 56a9379..0a224e2 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -911,6 +911,9 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
if (*bflags & BLIST_RETRY_HWERROR)
sdev->retry_hwerror = 1;
+ if (*bflags & BLIST_NO_DIF)
+ sdev->no_dif = 1;
+
transport_configure_device(&sdev->sdev_gendev);
if (sdev->host->hostt->slave_configure) {
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 9895f69..88fae8d 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -156,6 +156,7 @@ struct scsi_device {
unsigned is_visible:1; /* is the device visible in sysfs */
unsigned can_power_off:1; /* Device supports runtime power off */
unsigned wce_default_on:1; /* Cache is ON by default */
+ unsigned no_dif:1; /* T10 PI (DIF) should be disabled */
DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
struct list_head event_list; /* asserted events */
@@ -476,6 +477,9 @@ static inline int scsi_device_enclosure(struct scsi_device *sdev)
static inline int scsi_device_protection(struct scsi_device *sdev)
{
+ if (sdev->no_dif)
+ return 0;
+
return sdev->scsi_level > SCSI_2 && sdev->inquiry[5] & (1<<0);
}
diff --git a/include/scsi/scsi_devinfo.h b/include/scsi/scsi_devinfo.h
index b4ddd3b..cc1f3e7 100644
--- a/include/scsi/scsi_devinfo.h
+++ b/include/scsi/scsi_devinfo.h
@@ -30,4 +30,5 @@
#define BLIST_RETRY_HWERROR 0x400000 /* retry HARDWARE_ERROR */
#define BLIST_MAX_512 0x800000 /* maximum 512 sector cdb length */
#define BLIST_ATTACH_PQ3 0x1000000 /* Scan: Attach to PQ3 devices */
+#define BLIST_NO_DIF 0x2000000 /* Disable T10 PI (DIF) */
#endif
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/5] mpt2sas: Return the correct sense key for DIF errors
2012-08-28 18:29 [PATCH 1/5] sd: Avoid remapping bad reference tags Martin K. Petersen
2012-08-28 18:29 ` [PATCH 2/5] sd: Allow protection_type to be overridden Martin K. Petersen
2012-08-28 18:29 ` [PATCH 3/5] scsi: Disable DIF on Hitachi Ultrastar 15K300 Martin K. Petersen
@ 2012-08-28 18:29 ` Martin K. Petersen
2012-08-29 10:25 ` Reddy, Sreekanth
2012-08-28 18:29 ` [PATCH 5/5] mpt2sas: Add a module parameter that permits overriding protection capabilities Martin K. Petersen
3 siblings, 1 reply; 7+ messages in thread
From: Martin K. Petersen @ 2012-08-28 18:29 UTC (permalink / raw)
To: linux-scsi
Cc: James.Bottomley, Martin K. Petersen, Nagalakshmi.Nandigama,
Eric.Moore
From: "Martin K. Petersen" <martin.petersen@oracle.com>
Only a target device should return ABORTED COMMAND when a PI error is
discovered. The HBA should always set the sense key to ILLEGAL REQUEST.
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Nagalakshmi.Nandigama@lsi.com
Cc: Eric.Moore@lsi.com
---
drivers/scsi/mpt2sas/mpt2sas_scsih.c | 14 ++------------
1 files changed, 2 insertions(+), 12 deletions(-)
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index 7d774c5..bfda0ec 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -3772,8 +3772,6 @@ static void
_scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
{
u8 ascq;
- u8 sk;
- u8 host_byte;
switch (ioc_status) {
case MPI2_IOCSTATUS_EEDP_GUARD_ERROR:
@@ -3790,16 +3788,8 @@ _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
break;
}
- if (scmd->sc_data_direction == DMA_TO_DEVICE) {
- sk = ILLEGAL_REQUEST;
- host_byte = DID_ABORT;
- } else {
- sk = ABORTED_COMMAND;
- host_byte = DID_OK;
- }
-
- scsi_build_sense_buffer(0, scmd->sense_buffer, sk, 0x10, ascq);
- scmd->result = DRIVER_SENSE << 24 | (host_byte << 16) |
+ scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST, 0x10, ascq);
+ scmd->result = DRIVER_SENSE << 24 | (DID_ABORT << 16) |
SAM_STAT_CHECK_CONDITION;
}
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH 4/5] mpt2sas: Return the correct sense key for DIF errors
2012-08-28 18:29 ` [PATCH 4/5] mpt2sas: Return the correct sense key for DIF errors Martin K. Petersen
@ 2012-08-29 10:25 ` Reddy, Sreekanth
0 siblings, 0 replies; 7+ messages in thread
From: Reddy, Sreekanth @ 2012-08-29 10:25 UTC (permalink / raw)
To: Martin K. Petersen, linux-scsi@vger.kernel.org,
James.Bottomley@hansenpartnership.com
Cc: Nandigama, Nagalakshmi, Moore, Eric
James,
This patch seem to be fine. Please consider this patch as Acked-by: "Sreekanth Reddy" <Sreekanth.reddy@lsi.com>
Regards,
Sreekanth.
> -----Original Message-----
> From: linux-scsi-owner@vger.kernel.org [mailto:linux-scsi-
> owner@vger.kernel.org] On Behalf Of Martin K. Petersen
> Sent: Wednesday, August 29, 2012 12:00 AM
> To: linux-scsi@vger.kernel.org
> Cc: James.Bottomley@hansenpartnership.com; Martin K. Petersen;
> Nandigama, Nagalakshmi; Moore, Eric
> Subject: [PATCH 4/5] mpt2sas: Return the correct sense key for DIF
> errors
>
> From: "Martin K. Petersen" <martin.petersen@oracle.com>
>
> Only a target device should return ABORTED COMMAND when a PI error is
> discovered. The HBA should always set the sense key to ILLEGAL REQUEST.
>
> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
> Cc: Nagalakshmi.Nandigama@lsi.com
> Cc: Eric.Moore@lsi.com
> ---
> drivers/scsi/mpt2sas/mpt2sas_scsih.c | 14 ++------------
> 1 files changed, 2 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> index 7d774c5..bfda0ec 100644
> --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> @@ -3772,8 +3772,6 @@ static void
> _scsih_eedp_error_handling(struct scsi_cmnd *scmd, u16 ioc_status)
> {
> u8 ascq;
> - u8 sk;
> - u8 host_byte;
>
> switch (ioc_status) {
> case MPI2_IOCSTATUS_EEDP_GUARD_ERROR:
> @@ -3790,16 +3788,8 @@ _scsih_eedp_error_handling(struct scsi_cmnd
> *scmd, u16 ioc_status)
> break;
> }
>
> - if (scmd->sc_data_direction == DMA_TO_DEVICE) {
> - sk = ILLEGAL_REQUEST;
> - host_byte = DID_ABORT;
> - } else {
> - sk = ABORTED_COMMAND;
> - host_byte = DID_OK;
> - }
> -
> - scsi_build_sense_buffer(0, scmd->sense_buffer, sk, 0x10, ascq);
> - scmd->result = DRIVER_SENSE << 24 | (host_byte << 16) |
> + scsi_build_sense_buffer(0, scmd->sense_buffer, ILLEGAL_REQUEST,
> 0x10, ascq);
> + scmd->result = DRIVER_SENSE << 24 | (DID_ABORT << 16) |
> SAM_STAT_CHECK_CONDITION;
> }
>
> --
> 1.7.7.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi"
> in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 5/5] mpt2sas: Add a module parameter that permits overriding protection capabilities
2012-08-28 18:29 [PATCH 1/5] sd: Avoid remapping bad reference tags Martin K. Petersen
` (2 preceding siblings ...)
2012-08-28 18:29 ` [PATCH 4/5] mpt2sas: Return the correct sense key for DIF errors Martin K. Petersen
@ 2012-08-28 18:29 ` Martin K. Petersen
2012-08-29 10:13 ` Reddy, Sreekanth
3 siblings, 1 reply; 7+ messages in thread
From: Martin K. Petersen @ 2012-08-28 18:29 UTC (permalink / raw)
To: linux-scsi
Cc: James.Bottomley, Martin K. Petersen, Nagalakshmi.Nandigama,
Eric.Moore
From: "Martin K. Petersen" <martin.petersen@oracle.com>
Add a parameter that allows the host protection capabilities mask to be
provided at module load time.
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Nagalakshmi.Nandigama@lsi.com
Cc: Eric.Moore@lsi.com
---
drivers/scsi/mpt2sas/mpt2sas_scsih.c | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index bfda0ec..96f4d1f 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -123,6 +123,11 @@ static int disable_discovery = -1;
module_param(disable_discovery, int, 0);
MODULE_PARM_DESC(disable_discovery, " disable discovery ");
+/* permit overriding the host protection capabilities mask (EEDP/T10 PI) */
+static int prot_mask = 0;
+module_param(prot_mask, int, 0);
+MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=7 ");
+
/**
* struct sense_info - common structure for obtaining sense keys
* @skey: sense key
@@ -8088,8 +8093,14 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto out_add_shost_fail;
}
- scsi_host_set_prot(shost, SHOST_DIF_TYPE1_PROTECTION
- | SHOST_DIF_TYPE2_PROTECTION | SHOST_DIF_TYPE3_PROTECTION);
+ /* register EEDP capabilities with SCSI layer */
+ if (prot_mask)
+ scsi_host_set_prot(shost, prot_mask);
+ else
+ scsi_host_set_prot(shost, SHOST_DIF_TYPE1_PROTECTION
+ | SHOST_DIF_TYPE2_PROTECTION
+ | SHOST_DIF_TYPE3_PROTECTION);
+
scsi_host_set_guard(shost, SHOST_DIX_GUARD_CRC);
/* event thread */
--
1.7.7.6
^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH 5/5] mpt2sas: Add a module parameter that permits overriding protection capabilities
2012-08-28 18:29 ` [PATCH 5/5] mpt2sas: Add a module parameter that permits overriding protection capabilities Martin K. Petersen
@ 2012-08-29 10:13 ` Reddy, Sreekanth
0 siblings, 0 replies; 7+ messages in thread
From: Reddy, Sreekanth @ 2012-08-29 10:13 UTC (permalink / raw)
To: Martin K. Petersen, linux-scsi@vger.kernel.org,
James.Bottomley@hansenpartnership.com
Cc: Nandigama, Nagalakshmi, Moore, Eric
James,
This patch seem to be fine. Please consider this patch as Acked-by: "Sreekanth Reddy" <Sreekanth.reddy@lsi.com>
Regards,
Sreekanth
> -----Original Message-----
> From: linux-scsi-owner@vger.kernel.org [mailto:linux-scsi-
> owner@vger.kernel.org] On Behalf Of Martin K. Petersen
> Sent: Wednesday, August 29, 2012 12:00 AM
> To: linux-scsi@vger.kernel.org
> Cc: James.Bottomley@hansenpartnership.com; Martin K. Petersen;
> Nandigama, Nagalakshmi; Moore, Eric
> Subject: [PATCH 5/5] mpt2sas: Add a module parameter that permits
> overriding protection capabilities
>
> From: "Martin K. Petersen" <martin.petersen@oracle.com>
>
> Add a parameter that allows the host protection capabilities mask to be
> provided at module load time.
>
> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
> Cc: Nagalakshmi.Nandigama@lsi.com
> Cc: Eric.Moore@lsi.com
> ---
> drivers/scsi/mpt2sas/mpt2sas_scsih.c | 15 +++++++++++++--
> 1 files changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> index bfda0ec..96f4d1f 100644
> --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
> @@ -123,6 +123,11 @@ static int disable_discovery = -1;
> module_param(disable_discovery, int, 0);
> MODULE_PARM_DESC(disable_discovery, " disable discovery ");
>
> +/* permit overriding the host protection capabilities mask (EEDP/T10
> PI) */
> +static int prot_mask = 0;
> +module_param(prot_mask, int, 0);
> +MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=7
> ");
> +
> /**
> * struct sense_info - common structure for obtaining sense keys
> * @skey: sense key
> @@ -8088,8 +8093,14 @@ _scsih_probe(struct pci_dev *pdev, const struct
> pci_device_id *id)
> goto out_add_shost_fail;
> }
>
> - scsi_host_set_prot(shost, SHOST_DIF_TYPE1_PROTECTION
> - | SHOST_DIF_TYPE2_PROTECTION | SHOST_DIF_TYPE3_PROTECTION);
> + /* register EEDP capabilities with SCSI layer */
> + if (prot_mask)
> + scsi_host_set_prot(shost, prot_mask);
> + else
> + scsi_host_set_prot(shost, SHOST_DIF_TYPE1_PROTECTION
> + | SHOST_DIF_TYPE2_PROTECTION
> + | SHOST_DIF_TYPE3_PROTECTION);
> +
> scsi_host_set_guard(shost, SHOST_DIX_GUARD_CRC);
>
> /* event thread */
> --
> 1.7.7.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi"
> in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread