[GIT PULL] SCSI fixes for 4.5-rc3

2016-02-11 Thread James Bottomley
A set of seven fixes.  Two regressions in the new hisi_sas arm driver,
a blacklist entry for the marvell console which was causing a reset
cascade without it, a race fix in the WRITE_SAME/DISCARD routines, a
retry fix for the rdac driver, without which, it would prematurely
return EIO and a couple of fixes for the hyper-v storvsc driver.

The patch is available here:

git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes

The short changelog is:

Hannes Reinecke (1):
  scsi_dh_rdac: always retry MODE SELECT on command lock violation

John Garry (2):
  hisi_sas: fix v1 hw check for slot error
  hisi_sas: add dependency for HAS_IOMEM

K. Y. Srinivasan (2):
  storvsc: Use the specified target ID in device lookup
  storvsc: Install the storvsc specific timeout handler for FC devices

Martin K. Petersen (1):
  block/sd: Return -EREMOTEIO when WRITE SAME and DISCARD are disabled

Mika Westerberg (1):
  SCSI: Add Marvell Console to VPD blacklist

and the diffstat:

 block/blk-core.c   |  6 --
 drivers/scsi/device_handler/scsi_dh_rdac.c |  4 +++-
 drivers/scsi/hisi_sas/Kconfig  |  2 +-
 drivers/scsi/hisi_sas/hisi_sas_v1_hw.c |  9 +++--
 drivers/scsi/scsi_devinfo.c|  1 +
 drivers/scsi/sd.c  |  4 ++--
 drivers/scsi/storvsc_drv.c | 16 +++-
 include/linux/blkdev.h |  9 ++---
 8 files changed, 31 insertions(+), 20 deletions(-)

With the full diff below.

James

---

diff --git a/block/blk-core.c b/block/blk-core.c
index ab51685..b83d297 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2455,14 +2455,16 @@ struct request *blk_peek_request(struct request_queue 
*q)
 
rq = NULL;
break;
-   } else if (ret == BLKPREP_KILL) {
+   } else if (ret == BLKPREP_KILL || ret == BLKPREP_INVALID) {
+   int err = (ret == BLKPREP_INVALID) ? -EREMOTEIO : -EIO;
+
rq->cmd_flags |= REQ_QUIET;
/*
 * Mark this request as started so we don't trigger
 * any debug logic in the end I/O path.
 */
blk_start_request(rq);
-   __blk_end_request_all(rq, -EIO);
+   __blk_end_request_all(rq, err);
} else {
printk(KERN_ERR "%s: bad return=%d\n", __func__, ret);
break;
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c 
b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 3613581..93880ed 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -562,7 +562,7 @@ static int mode_select_handle_sense(struct scsi_device 
*sdev,
/*
 * Command Lock contention
 */
-   err = SCSI_DH_RETRY;
+   err = SCSI_DH_IMM_RETRY;
break;
default:
break;
@@ -612,6 +612,8 @@ retry:
err = mode_select_handle_sense(sdev, h->sense);
if (err == SCSI_DH_RETRY && retry_cnt--)
goto retry;
+   if (err == SCSI_DH_IMM_RETRY)
+   goto retry;
}
if (err == SCSI_DH_OK) {
h->state = RDAC_STATE_ACTIVE;
diff --git a/drivers/scsi/hisi_sas/Kconfig b/drivers/scsi/hisi_sas/Kconfig
index b676618..d1dd161 100644
--- a/drivers/scsi/hisi_sas/Kconfig
+++ b/drivers/scsi/hisi_sas/Kconfig
@@ -1,6 +1,6 @@
 config SCSI_HISI_SAS
tristate "HiSilicon SAS"
-   depends on HAS_DMA
+   depends on HAS_DMA && HAS_IOMEM
depends on ARM64 || COMPILE_TEST
select SCSI_SAS_LIBSAS
select BLK_DEV_INTEGRITY
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c 
b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
index 057fdeb..eea24d7 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
@@ -1289,13 +1289,10 @@ static int slot_complete_v1_hw(struct hisi_hba 
*hisi_hba,
goto out;
}
 
-   if (cmplt_hdr_data & CMPLT_HDR_ERR_RCRD_XFRD_MSK) {
-   if (!(cmplt_hdr_data & CMPLT_HDR_CMD_CMPLT_MSK) ||
-   !(cmplt_hdr_data & CMPLT_HDR_RSPNS_XFRD_MSK))
-   ts->stat = SAS_DATA_OVERRUN;
-   else
-   slot_err_v1_hw(hisi_hba, task, slot);
+   if (cmplt_hdr_data & CMPLT_HDR_ERR_RCRD_XFRD_MSK &&
+   !(cmplt_hdr_data & CMPLT_HDR_RSPNS_XFRD_MSK)) {
 
+   slot_err_v1_hw(hisi_hba, task, slot);
goto out;
}
 
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index 47b9d13..da2e068 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -205,6 

[GIT PULL] SCSI fixes for 4.5-rc3

2016-02-11 Thread James Bottomley
A set of seven fixes.  Two regressions in the new hisi_sas arm driver,
a blacklist entry for the marvell console which was causing a reset
cascade without it, a race fix in the WRITE_SAME/DISCARD routines, a
retry fix for the rdac driver, without which, it would prematurely
return EIO and a couple of fixes for the hyper-v storvsc driver.

The patch is available here:

git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes

The short changelog is:

Hannes Reinecke (1):
  scsi_dh_rdac: always retry MODE SELECT on command lock violation

John Garry (2):
  hisi_sas: fix v1 hw check for slot error
  hisi_sas: add dependency for HAS_IOMEM

K. Y. Srinivasan (2):
  storvsc: Use the specified target ID in device lookup
  storvsc: Install the storvsc specific timeout handler for FC devices

Martin K. Petersen (1):
  block/sd: Return -EREMOTEIO when WRITE SAME and DISCARD are disabled

Mika Westerberg (1):
  SCSI: Add Marvell Console to VPD blacklist

and the diffstat:

 block/blk-core.c   |  6 --
 drivers/scsi/device_handler/scsi_dh_rdac.c |  4 +++-
 drivers/scsi/hisi_sas/Kconfig  |  2 +-
 drivers/scsi/hisi_sas/hisi_sas_v1_hw.c |  9 +++--
 drivers/scsi/scsi_devinfo.c|  1 +
 drivers/scsi/sd.c  |  4 ++--
 drivers/scsi/storvsc_drv.c | 16 +++-
 include/linux/blkdev.h |  9 ++---
 8 files changed, 31 insertions(+), 20 deletions(-)

With the full diff below.

James

---

diff --git a/block/blk-core.c b/block/blk-core.c
index ab51685..b83d297 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2455,14 +2455,16 @@ struct request *blk_peek_request(struct request_queue 
*q)
 
rq = NULL;
break;
-   } else if (ret == BLKPREP_KILL) {
+   } else if (ret == BLKPREP_KILL || ret == BLKPREP_INVALID) {
+   int err = (ret == BLKPREP_INVALID) ? -EREMOTEIO : -EIO;
+
rq->cmd_flags |= REQ_QUIET;
/*
 * Mark this request as started so we don't trigger
 * any debug logic in the end I/O path.
 */
blk_start_request(rq);
-   __blk_end_request_all(rq, -EIO);
+   __blk_end_request_all(rq, err);
} else {
printk(KERN_ERR "%s: bad return=%d\n", __func__, ret);
break;
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c 
b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 3613581..93880ed 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -562,7 +562,7 @@ static int mode_select_handle_sense(struct scsi_device 
*sdev,
/*
 * Command Lock contention
 */
-   err = SCSI_DH_RETRY;
+   err = SCSI_DH_IMM_RETRY;
break;
default:
break;
@@ -612,6 +612,8 @@ retry:
err = mode_select_handle_sense(sdev, h->sense);
if (err == SCSI_DH_RETRY && retry_cnt--)
goto retry;
+   if (err == SCSI_DH_IMM_RETRY)
+   goto retry;
}
if (err == SCSI_DH_OK) {
h->state = RDAC_STATE_ACTIVE;
diff --git a/drivers/scsi/hisi_sas/Kconfig b/drivers/scsi/hisi_sas/Kconfig
index b676618..d1dd161 100644
--- a/drivers/scsi/hisi_sas/Kconfig
+++ b/drivers/scsi/hisi_sas/Kconfig
@@ -1,6 +1,6 @@
 config SCSI_HISI_SAS
tristate "HiSilicon SAS"
-   depends on HAS_DMA
+   depends on HAS_DMA && HAS_IOMEM
depends on ARM64 || COMPILE_TEST
select SCSI_SAS_LIBSAS
select BLK_DEV_INTEGRITY
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c 
b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
index 057fdeb..eea24d7 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v1_hw.c
@@ -1289,13 +1289,10 @@ static int slot_complete_v1_hw(struct hisi_hba 
*hisi_hba,
goto out;
}
 
-   if (cmplt_hdr_data & CMPLT_HDR_ERR_RCRD_XFRD_MSK) {
-   if (!(cmplt_hdr_data & CMPLT_HDR_CMD_CMPLT_MSK) ||
-   !(cmplt_hdr_data & CMPLT_HDR_RSPNS_XFRD_MSK))
-   ts->stat = SAS_DATA_OVERRUN;
-   else
-   slot_err_v1_hw(hisi_hba, task, slot);
+   if (cmplt_hdr_data & CMPLT_HDR_ERR_RCRD_XFRD_MSK &&
+   !(cmplt_hdr_data & CMPLT_HDR_RSPNS_XFRD_MSK)) {
 
+   slot_err_v1_hw(hisi_hba, task, slot);
goto out;
}
 
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
index 47b9d13..da2e068 100644
--- a/drivers/scsi/scsi_devinfo.c
+++ b/drivers/scsi/scsi_devinfo.c
@@ -205,6