On Wed, 10 Apr 2019, Alan Stern wrote: > On Wed, 10 Apr 2019, Bollinger, Seth wrote: > > > > On Apr 9, 2019, at 2:13 PM, Bollinger, Seth <Seth.Bollinger@xxxxxxxx<mailto:Seth.Bollinger@xxxxxxxx>> wrote: > > > > > > > Seth, you can try adding: > > > > > > > > blk_queue_virt_boundary(sdev->request_queue, 1024 - 1) > > > > > > > > in drivers/usb/storage/scsiglue.c:slave_alloc(), just after the call to > > > > blk_queue_update_dma_alignment(). Perhaps that will help > > > > > > > > > > I will do that as a test. However, I’m concerned that we’re solving only a specific case. Won’t it fail in a similar way if a different subsystem does the same thing (USB modem or > video drivers, etc.)? > > > > Just to follow up, this does seem to solve the specific problem. > > Great! Okay, here's an actual patch for you to try. I have removed > the blk_queue_update_dma_alignment() call because it doesn't seem to > be necessary. The starting location of each scatterlist element is > unimportant; only the length matters. > > If this works, I will submit it as a bugfix for the kernel. Any more test results? I need to know that you're confident the patch works okay. Alan Stern PS: I changed my mind and decided to keep the blk_queue_update_dma_alignment() call. It probably doesn't hurt (the data buffers are most likely already aligned) and some host controllers may have alignment requirements.