diff -Naur mptlinux-4.18.00.00/Makefile mptlinux-4.18.00.00-new/Makefile --- mptlinux-4.18.00.00/Makefile 2009-02-03 05:52:56.000000000 +0100 +++ mptlinux-4.18.00.00-new/Makefile 2009-12-05 00:33:30.807278365 +0100 @@ -16,4 +16,3 @@ obj-$(CONFIG_FUSION_FC) += mptbase.o mptscsih.o mptfc.o obj-$(CONFIG_FUSION_SAS) += mptbase.o mptscsih.o mptsas.o obj-$(CONFIG_FUSION_CTL) += mptctl.o -obj-$(CONFIG_FUSION_LAN) += mptlan.o diff -Naur mptlinux-4.18.00.00/mptsas.c mptlinux-4.18.00.00-new/mptsas.c --- mptlinux-4.18.00.00/mptsas.c 2009-02-03 05:52:56.000000000 +0100 +++ mptlinux-4.18.00.00-new/mptsas.c 2009-12-05 00:57:41.697279468 +0100 @@ -2434,8 +2434,8 @@ if (req->bio->bi_vcnt > 1 || rsp->bio->bi_vcnt > 1) { printk(MYIOC_s_ERR_FMT "%s: multiple segments req %u %u, rsp %u %u\n", - ioc->name, __func__, req->bio->bi_vcnt, req->data_len, - rsp->bio->bi_vcnt, rsp->data_len); + ioc->name, __func__, req->bio->bi_vcnt, blk_rq_bytes(req), + rsp->bio->bi_vcnt, blk_rq_bytes(rsp)); return -EINVAL; } @@ -2452,7 +2452,7 @@ smpreq = (SmpPassthroughRequest_t *)mf; memset(smpreq, 0, sizeof(*smpreq)); - smpreq->RequestDataLength = cpu_to_le16(req->data_len - 4); + smpreq->RequestDataLength = cpu_to_le16(blk_rq_bytes(req) - 4); smpreq->Function = MPI_FUNCTION_SMP_PASSTHROUGH; if (rphy) @@ -2482,10 +2482,10 @@ flagsLength = flagsLength << MPI_SGE_FLAGS_SHIFT; - flagsLength |= (req->data_len - 4); + flagsLength |= (blk_rq_bytes(req) - 4); dma_addr_out = pci_map_single(ioc->pcidev, bio_data(req->bio), - req->data_len, PCI_DMA_BIDIRECTIONAL); + blk_rq_bytes(req), PCI_DMA_BIDIRECTIONAL); if (!dma_addr_out) goto put_mf; ioc->add_sge(psge, flagsLength, dma_addr_out); @@ -2498,9 +2498,9 @@ MPI_SGE_FLAGS_END_OF_BUFFER; flagsLength = flagsLength << MPI_SGE_FLAGS_SHIFT; - flagsLength |= rsp->data_len + 4; + flagsLength |= blk_rq_bytes(rsp) + 4; dma_addr_in = pci_map_single(ioc->pcidev, bio_data(rsp->bio), - rsp->data_len, PCI_DMA_BIDIRECTIONAL); + blk_rq_bytes(rsp), PCI_DMA_BIDIRECTIONAL); if (!dma_addr_in) goto out_unmap; @@ -2531,8 +2531,12 @@ smprep = (SmpPassthroughReply_t *)ioc->sas_mgmt.reply; memcpy(req->sense, smprep, sizeof(*smprep)); req->sense_len = sizeof(*smprep); + + rsp->resid_len = blk_rq_bytes(rsp) - smprep->ResponseDataLength; +/* req->data_len = 0; rsp->data_len -= smprep->ResponseDataLength; +*/ } else { printk(MYIOC_s_ERR_FMT "%s: smp passthru reply failed to be returned\n", @@ -2541,10 +2545,10 @@ } out_unmap: if (dma_addr_out) - pci_unmap_single(ioc->pcidev, dma_addr_out, req->data_len, + pci_unmap_single(ioc->pcidev, dma_addr_out, blk_rq_bytes(req), PCI_DMA_BIDIRECTIONAL); if (dma_addr_in) - pci_unmap_single(ioc->pcidev, dma_addr_in, rsp->data_len, + pci_unmap_single(ioc->pcidev, dma_addr_in, blk_rq_bytes(rsp), PCI_DMA_BIDIRECTIONAL); put_mf: if (mf)