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

Commit 4bd13a07 authored by Alexey Khoroshilov's avatar Alexey Khoroshilov Committed by Martin K. Petersen
Browse files

scsi: mvumi: remove code handling zero scsi_sg_count(scmd) case



As Christoph Hellwig noted, SCSI commands that transfer data always have
a SG entry. The patch removes dead code in mvumi_make_sgl(),
mvumi_complete_cmd() and mvumi_timed_out() that handle zero
scsi_sg_count(scmd) case.

Also the patch adds pci_unmap_sg() on failure path in mvumi_make_sgl().

Signed-off-by: default avatarAlexey Khoroshilov <khoroshilov@ispras.ru>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 6b8accea
Loading
Loading
Loading
Loading
+26 −59
Original line number Original line Diff line number Diff line
@@ -210,14 +210,15 @@ static int mvumi_make_sgl(struct mvumi_hba *mhba, struct scsi_cmnd *scmd,
	unsigned int sgnum = scsi_sg_count(scmd);
	unsigned int sgnum = scsi_sg_count(scmd);
	dma_addr_t busaddr;
	dma_addr_t busaddr;


	if (sgnum) {
	sg = scsi_sglist(scmd);
	sg = scsi_sglist(scmd);
	*sg_count = pci_map_sg(mhba->pdev, sg, sgnum,
	*sg_count = pci_map_sg(mhba->pdev, sg, sgnum,
			       (int) scmd->sc_data_direction);
			       (int) scmd->sc_data_direction);
	if (*sg_count > mhba->max_sge) {
	if (*sg_count > mhba->max_sge) {
			dev_err(&mhba->pdev->dev, "sg count[0x%x] is bigger "
		dev_err(&mhba->pdev->dev,
						"than max sg[0x%x].\n",
			"sg count[0x%x] is bigger than max sg[0x%x].\n",
			*sg_count, mhba->max_sge);
			*sg_count, mhba->max_sge);
		pci_unmap_sg(mhba->pdev, sg, sgnum,
			     (int) scmd->sc_data_direction);
		return -1;
		return -1;
	}
	}
	for (i = 0; i < *sg_count; i++) {
	for (i = 0; i < *sg_count; i++) {
@@ -231,19 +232,6 @@ static int mvumi_make_sgl(struct mvumi_hba *mhba, struct scsi_cmnd *scmd,


		sgd_inc(mhba, m_sg);
		sgd_inc(mhba, m_sg);
	}
	}
	} else {
		scmd->SCp.dma_handle = scsi_bufflen(scmd) ?
			pci_map_single(mhba->pdev, scsi_sglist(scmd),
				scsi_bufflen(scmd),
				(int) scmd->sc_data_direction)
			: 0;
		busaddr = scmd->SCp.dma_handle;
		m_sg->baseaddr_l = cpu_to_le32(lower_32_bits(busaddr));
		m_sg->baseaddr_h = cpu_to_le32(upper_32_bits(busaddr));
		m_sg->flags = 1U << mhba->eot_flag;
		sgd_setsz(mhba, m_sg, cpu_to_le32(scsi_bufflen(scmd)));
		*sg_count = 1;
	}


	return 0;
	return 0;
}
}
@@ -1350,21 +1338,10 @@ static void mvumi_complete_cmd(struct mvumi_hba *mhba, struct mvumi_cmd *cmd,
		break;
		break;
	}
	}


	if (scsi_bufflen(scmd)) {
	if (scsi_bufflen(scmd))
		if (scsi_sg_count(scmd)) {
		pci_unmap_sg(mhba->pdev, scsi_sglist(scmd),
			pci_unmap_sg(mhba->pdev,
				scsi_sglist(scmd),
			     scsi_sg_count(scmd),
			     scsi_sg_count(scmd),
			     (int) scmd->sc_data_direction);
			     (int) scmd->sc_data_direction);
		} else {
			pci_unmap_single(mhba->pdev,
				scmd->SCp.dma_handle,
				scsi_bufflen(scmd),
				(int) scmd->sc_data_direction);

			scmd->SCp.dma_handle = 0;
		}
	}
	cmd->scmd->scsi_done(scmd);
	cmd->scmd->scsi_done(scmd);
	mvumi_return_cmd(mhba, cmd);
	mvumi_return_cmd(mhba, cmd);
}
}
@@ -2171,19 +2148,9 @@ static enum blk_eh_timer_return mvumi_timed_out(struct scsi_cmnd *scmd)
	scmd->result = (DRIVER_INVALID << 24) | (DID_ABORT << 16);
	scmd->result = (DRIVER_INVALID << 24) | (DID_ABORT << 16);
	scmd->SCp.ptr = NULL;
	scmd->SCp.ptr = NULL;
	if (scsi_bufflen(scmd)) {
	if (scsi_bufflen(scmd)) {
		if (scsi_sg_count(scmd)) {
		pci_unmap_sg(mhba->pdev, scsi_sglist(scmd),
			pci_unmap_sg(mhba->pdev,
				scsi_sglist(scmd),
			     scsi_sg_count(scmd),
			     scsi_sg_count(scmd),
			     (int)scmd->sc_data_direction);
			     (int)scmd->sc_data_direction);
		} else {
			pci_unmap_single(mhba->pdev,
				scmd->SCp.dma_handle,
				scsi_bufflen(scmd),
				(int)scmd->sc_data_direction);

			scmd->SCp.dma_handle = 0;
		}
	}
	}
	mvumi_return_cmd(mhba, cmd);
	mvumi_return_cmd(mhba, cmd);
	spin_unlock_irqrestore(mhba->shost->host_lock, flags);
	spin_unlock_irqrestore(mhba->shost->host_lock, flags);