On Thu, Dec 05, 2019 at 11:22:47PM +0100, Pavel Machek wrote:
Hi!
From: Ming Lei ming.lei@redhat.com
[ Upstream commit c53336c8f5f29043fded57912cc06c24e12613d7 ]
Logical block size is the lowest possible block size that the storage device can address. Max segment size is often related with controller's DMA capability. And it is reasonable to align max segment size with logical block size.
SDHCI sets un-aligned max segment size, and causes ADMA error, so fix it by aligning max segment size with logical block size.
If un-aligned max segment sizes are problem, should we add checks to prevent setting them?
At least these set unaligned problems; is that a problem?
drivers/block/nbd.c: blk_queue_max_segment_size(disk->queue, UINT_MAX); drivers/block/virtio_blk.c: blk_queue_max_segment_size(q, -1U); drivers/block/rbd.c: blk_queue_max_segment_size(q, UINT_MAX);
In theory, all segment size should be aligned, however the above MAX value just means the queue hasn't max segment size limit, so it won't be applied actually.
Thanks, Ming