Bug 16010

Summary: Mptlinux update problem but need
Product: SCSI Drivers Reporter: Fabio Fantoni (fantonifabio)
Component: OtherAssignee: scsi_drivers-other
Status: RESOLVED INVALID    
Severity: normal CC: alan, dujun, kstailey
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.32 Subsystem:
Regression: No Bisected commit-id:

Description Fabio Fantoni 2010-05-20 07:24:07 UTC
For Omsa 6.0.1 is need mptlinux version more than 3.04 present in kernel
I have download 4.22 from lsi site and try build update driver with dkms, i have already do same on 2.6.26 past without problem but with 2.6.32 give this compilation error:

/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c: In function ‘mptsas_smp_handler’:
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2757: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2758: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2775: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2805: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2808: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2821: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2823: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2854: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2855: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2864: error: ‘struct request’ has no member named ‘data_len’
/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2867: error: ‘struct request’ has no member named ‘data_len’
make[3]: *** [/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.o] Error 1
make[2]: *** [_module_/var/lib/dkms/mptlinux/4.22.00.00/build] Error 2
make[1]: *** [sub-make] Error 2
make: *** [all] Error 2 

Is possible update mptlinux on new kernel version please?
Comment 1 dujun 2010-05-21 09:33:32 UTC
you could fix it by change the data_len to _data_len. pls refer to the "struct request" in the 2.6.32 kernel header.
Comment 2 Anonymous Emailer 2010-05-21 14:05:40 UTC
Reply-To: James.Bottomley@suse.de

On Thu, 2010-05-20 at 07:24 +0000, bugzilla-daemon@bugzilla.kernel.org
wrote:
> For Omsa 6.0.1 is need mptlinux version more than 3.04 present in kernel
> I have download 4.22 from lsi site and try build update driver with dkms, i
> have already do same on 2.6.26 past without problem but with 2.6.32 give this
> compilation error:
> 
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c: In function
> ‘mptsas_smp_handler’:
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2757: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2758: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2775: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2805: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2808: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2821: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2823: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2854: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2855: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2864: error: ‘struct
> request’
> has no member named ‘data_len’
> /var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.c:2867: error: ‘struct
> request’
> has no member named ‘data_len’
> make[3]: *** [/var/lib/dkms/mptlinux/4.22.00.00/build/mptsas.o] Error 1
> make[2]: *** [_module_/var/lib/dkms/mptlinux/4.22.00.00/build] Error 2
> make[1]: *** [sub-make] Error 2
> make: *** [all] Error 2 
> 
> Is possible update mptlinux on new kernel version please?

bugzilla.kernel.org is for actual bugs within the linux kernel, not for
problems with out of tree drivers.  The issue you're trying to report
needs to be fixed by LSI.  While it's not impossible they would notice
this request on the scsi mailing list, you're much more likely to get
their attention by requesting support directly from them.

James
Comment 3 Kenneth Stailey 2010-07-12 15:30:29 UTC
@dujun - Thanks

It's actually a double underscore: __data_len

diff against 4.22.00.00-2

--- mptsas.c.DIST	2009-11-12 05:17:05.000000000 -0500
+++ mptsas.c	2010-07-12 11:14:41.480493720 -0400
@@ -2754,8 +2754,8 @@
 	/* do we need to support multiple segments? */
 	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, req->__data_len,
+		    rsp->bio->bi_vcnt, rsp->__data_len);
 		return -EINVAL;
 	}
 
@@ -2772,7 +2772,7 @@
 	smpreq = (SmpPassthroughRequest_t *)mf;
 	memset(smpreq, 0, sizeof(*smpreq));
 
-	smpreq->RequestDataLength = cpu_to_le16(req->data_len - 4);
+	smpreq->RequestDataLength = cpu_to_le16(req->__data_len - 4);
 	smpreq->Function = MPI_FUNCTION_SMP_PASSTHROUGH;
 
 	if (rphy)
@@ -2802,10 +2802,10 @@
 
 	flagsLength = flagsLength << MPI_SGE_FLAGS_SHIFT;
 
-	flagsLength |= (req->data_len - 4);
+	flagsLength |= (req->__data_len - 4);
 
 	dma_addr_out = pci_map_single(ioc->pcidev, bio_data(req->bio),
-				      req->data_len, PCI_DMA_BIDIRECTIONAL);
+				      req->__data_len, PCI_DMA_BIDIRECTIONAL);
 	if (!dma_addr_out)
 		goto put_mf;
 	ioc->add_sge(psge, flagsLength, dma_addr_out);
@@ -2818,9 +2818,9 @@
 		MPI_SGE_FLAGS_END_OF_BUFFER;
 
 	flagsLength = flagsLength << MPI_SGE_FLAGS_SHIFT;
-	flagsLength |= rsp->data_len + 4;
+	flagsLength |= rsp->__data_len + 4;
 	dma_addr_in =  pci_map_single(ioc->pcidev, bio_data(rsp->bio),
-				      rsp->data_len, PCI_DMA_BIDIRECTIONAL);
+				      rsp->__data_len, PCI_DMA_BIDIRECTIONAL);
 	if (!dma_addr_in)
 		goto out_unmap;
 
@@ -2851,8 +2851,8 @@
 		smprep = (SmpPassthroughReply_t *)ioc->sas_mgmt.reply;
 		memcpy(req->sense, smprep, sizeof(*smprep));
 		req->sense_len = sizeof(*smprep);
-		req->data_len = 0;
-		rsp->data_len -= 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",
@@ -2861,10 +2861,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, req->__data_len,
 				 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, rsp->__data_len,
 				 PCI_DMA_BIDIRECTIONAL);
 put_mf:
 	if (mf)