On 2022/09/13 15:12, Keith Busch wrote: > On Thu, Sep 08, 2022 at 09:45:26AM -0700, Keith Busch wrote: >> From: Keith Busch <kbu...@kernel.org> >> >> An iov length needs to be aligned to the logical block size, which may >> be larger than the memory alignment. > > [cc'ing some other interested folks] > > Any thoughts on this patch? It is fixing an observed IO error when running > virtio-blk with the default 512b logical block size backed by a drive > formatted > with 4k logical block.
The patch look OK to me, but having virtio expose a 512B LBA size for a backing device that has 4K LBAs will break all IOs if caching is turned off (direct IOs case), even if this patch is applied. No ? > >> --- >> block/io.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/block/io.c b/block/io.c >> index 0a8cbefe86..296d4b49a7 100644 >> --- a/block/io.c >> +++ b/block/io.c >> @@ -3243,13 +3243,14 @@ bool bdrv_qiov_is_aligned(BlockDriverState *bs, >> QEMUIOVector *qiov) >> { >> int i; >> size_t alignment = bdrv_min_mem_align(bs); >> + size_t len = bs->bl.request_alignment; >> IO_CODE(); >> >> for (i = 0; i < qiov->niov; i++) { >> if ((uintptr_t) qiov->iov[i].iov_base % alignment) { >> return false; >> } >> - if (qiov->iov[i].iov_len % alignment) { >> + if (qiov->iov[i].iov_len % len) { >> return false; >> } >> } >> -- >> 2.30.2 >> -- Damien Le Moal Western Digital Research