Re: [PATCH v2] scsi: Avoid crashing if device uses DIX but adapter does not support it

2015-01-19 Thread Martin K. Petersen
> "Ewan" == Ewan D Milne  writes:

Ewan> This can happen if a multipathed device uses DIX and another path
Ewan> is added via an adapter that does not support it.  Multipath
Ewan> should not allow this path to be added, but we should not depend
Ewan> upon that to avoid crashing.

Reviewed-by: Martin K. Petersen 

-- 
Martin K. Petersen  Oracle Linux Engineering
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2] scsi: Avoid crashing if device uses DIX but adapter does not support it

2015-01-15 Thread Ewan D. Milne
From: "Ewan D. Milne" 

This can happen if a multipathed device uses DIX and another path is
added via an adapter that does not support it.  Multipath should not
allow this path to be added, but we should not depend upon that to avoid
crashing.

Signed-off-by: Ewan D. Milne 
---
 drivers/scsi/scsi_lib.c | 12 +++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 6d5c0b8..17bb541 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1143,7 +1143,17 @@ int scsi_init_io(struct scsi_cmnd *cmd)
struct scsi_data_buffer *prot_sdb = cmd->prot_sdb;
int ivecs, count;
 
-   BUG_ON(prot_sdb == NULL);
+   if (prot_sdb == NULL) {
+   /*
+* This can happen if someone (e.g. multipath)
+* queues a command to a device on an adapter
+* that does not support DIX.
+*/
+   WARN_ON_ONCE(1);
+   error = BLKPREP_KILL;
+   goto err_exit;
+   }
+
ivecs = blk_rq_count_integrity_sg(rq->q, rq->bio);
 
if (scsi_alloc_sgtable(prot_sdb, ivecs, is_mq)) {
-- 
1.7.11.7

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html