On Fri, Jan 30, 2015 at 05:43:04PM +0000, Andy Falanga (afalanga) wrote: > > > This function does something that seems rather strange. On line 859, > > > a for loop determines the number of pages needed for the copying of > > > the user data to kernel space. Then the memory is allocated (line > > > 886 bio_kmalloc()). Then, strangely, on line 895, there is this > > > conditional: > > > > This is because the function can also be used with preallocated pages, > > a feature only used by the sg and tape drivers. > > > > Make sure your user memory is 4k aligned, and you should be able to > > avoid the copy entirely (1). > > Where is this 4k alignment being enforced? When sg_start_req calls to > blk_rq_map_user_iov, the only check for alignment is that the data buffers > are 4-byte aligned (q->dma_alignment == 3). I have verified that they are. Indeed, I though we had the more strict direct I/O alignment. Still doesn't help because the sg driver refuses to directly map user pages for vectored I/O. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html