diff options
Diffstat (limited to 'drivers/scsi/mpt3sas/mpt3sas_transport.c')
| -rw-r--r-- | drivers/scsi/mpt3sas/mpt3sas_transport.c | 39 | 
1 files changed, 20 insertions, 19 deletions
diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c index e771a88c6a7..65170cb1a00 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_transport.c +++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c @@ -1884,7 +1884,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	struct MPT3SAS_ADAPTER *ioc = shost_priv(shost);  	Mpi2SmpPassthroughRequest_t *mpi_request;  	Mpi2SmpPassthroughReply_t *mpi_reply; -	int rc, i; +	int rc;  	u16 smid;  	u32 ioc_state;  	unsigned long timeleft; @@ -1898,7 +1898,8 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	void *pci_addr_out = NULL;  	u16 wait_state_count;  	struct request *rsp = req->next_rq; -	struct bio_vec *bvec = NULL; +	struct bio_vec bvec; +	struct bvec_iter iter;  	if (!rsp) {  		pr_err(MPT3SAS_FMT "%s: the smp response space is missing\n", @@ -1925,7 +1926,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	ioc->transport_cmds.status = MPT3_CMD_PENDING;  	/* Check if the request is split across multiple segments */ -	if (req->bio->bi_vcnt > 1) { +	if (bio_multiple_segments(req->bio)) {  		u32 offset = 0;  		/* Allocate memory and copy the request */ @@ -1938,11 +1939,11 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  			goto out;  		} -		bio_for_each_segment(bvec, req->bio, i) { +		bio_for_each_segment(bvec, req->bio, iter) {  			memcpy(pci_addr_out + offset, -			    page_address(bvec->bv_page) + bvec->bv_offset, -			    bvec->bv_len); -			offset += bvec->bv_len; +			    page_address(bvec.bv_page) + bvec.bv_offset, +			    bvec.bv_len); +			offset += bvec.bv_len;  		}  	} else {  		dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio), @@ -1957,7 +1958,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	/* Check if the response needs to be populated across  	 * multiple segments */ -	if (rsp->bio->bi_vcnt > 1) { +	if (bio_multiple_segments(rsp->bio)) {  		pci_addr_in = pci_alloc_consistent(ioc->pdev, blk_rq_bytes(rsp),  		    &pci_dma_in);  		if (!pci_addr_in) { @@ -2018,7 +2019,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  	mpi_request->RequestDataLength = cpu_to_le16(blk_rq_bytes(req) - 4);  	psge = &mpi_request->SGL; -	if (req->bio->bi_vcnt > 1) +	if (bio_multiple_segments(req->bio))  		ioc->build_sg(ioc, psge, pci_dma_out, (blk_rq_bytes(req) - 4),  		    pci_dma_in, (blk_rq_bytes(rsp) + 4));  	else @@ -2063,23 +2064,23 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy,  		/* check if the resp needs to be copied from the allocated  		 * pci mem */ -		if (rsp->bio->bi_vcnt > 1) { +		if (bio_multiple_segments(rsp->bio)) {  			u32 offset = 0;  			u32 bytes_to_copy =  			    le16_to_cpu(mpi_reply->ResponseDataLength); -			bio_for_each_segment(bvec, rsp->bio, i) { -				if (bytes_to_copy <= bvec->bv_len) { -					memcpy(page_address(bvec->bv_page) + -					    bvec->bv_offset, pci_addr_in + +			bio_for_each_segment(bvec, rsp->bio, iter) { +				if (bytes_to_copy <= bvec.bv_len) { +					memcpy(page_address(bvec.bv_page) + +					    bvec.bv_offset, pci_addr_in +  					    offset, bytes_to_copy);  					break;  				} else { -					memcpy(page_address(bvec->bv_page) + -					    bvec->bv_offset, pci_addr_in + -					    offset, bvec->bv_len); -					bytes_to_copy -= bvec->bv_len; +					memcpy(page_address(bvec.bv_page) + +					    bvec.bv_offset, pci_addr_in + +					    offset, bvec.bv_len); +					bytes_to_copy -= bvec.bv_len;  				} -				offset += bvec->bv_len; +				offset += bvec.bv_len;  			}  		}  	} else {  | 
