On Wed, 10 Mar 2010, Oliver Neukum wrote: > Am Montag, 8. März 2010 19:50:23 schrieb Alan Stern: > > > > sg and src need to be compared with the original values when the > > > > scatterlist was created. In invoke_transport() print out the values of > > > > scsi_sglist(srb), srb->sense_buffer, &ses->sense_sgl, and > > > > sg_virt(&ses->sense_sgl). Do this after the call to > > > > scsi_eh_prep_cmnd(). > > > Mar 8 19:06:10 vanamonde kernel: usb-storage: Issuing auto-REQUEST_SENSE > > > Mar 8 19:06:10 vanamonde kernel: usb_stor_invoke_transport - sglist ffff880135b37dc8 sense buffer ffff8801363db940 sense sgl ffff8801363db940 sg_virt ffffea00043dd7ea page link 0000000087654321 dmaaddr ffffea0 0043dd7ea > > > Mar 8 19:06:10 vanamonde kernel: usb-storage: Bulk Command S 0x43425355 T 0x118 L 18 F 128 Trg 0 LUN 0 CL 6 > > > Mar 8 19:06:10 vanamonde kernel: usb-storage: usb_stor_bulk_transfer_buf: xfer 31 bytes > > > Mar 8 19:06:10 vanamonde kernel: mon_text_get_data: num_sgs == 0: src ffff880037807000 > > > > There are several problems here. Are you sure your printk line really > > matches the right value with each label? > > Retry_Sense: > US_DEBUGP("Issuing auto-REQUEST_SENSE\n"); > > scsi_eh_prep_cmnd(srb, &ses, NULL, 0, sense_size); > printk(KERN_ERR"%s - sglist %p sense buffer %p sense sgl %p sg_virt %p page link %p dmaaddr %p\n", __func__, > scsi_sglist(srb), srb->sense_buffer, ses.sense_sgl, ((void *)sg_virt(&ses.sense_sgl)), ---------------------------------------------^ > (void *)ses.sense_sgl.page_link, (void *)ses.sense_sgl.dma_address); > > As far as I can tell, it is correct? Disassembly needed? I asked for &ses.sense_sgl, not ses.sense_sgl. That must have messed up the printk, since it would pass the entire structure as an argument instead of just passing its address. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html