|
@@ -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)) {
|