Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91724c20 authored by Ewan D. Milne's avatar Ewan D. Milne Committed by Christoph Hellwig
Browse files

scsi: Avoid crashing if device uses DIX but adapter does not support it



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: default avatarEwan D. Milne <emilne@redhat.com>
Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 99531e60
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -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)) {