From 3015984eb6778214d381cf7de32d8ab81e277728 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Thu, 5 Dec 2013 13:01:46 +0100 Subject: [PATCH 07/37] block: Detect unaligned length in bdrv_qiov_is_aligned() Message-id: <1392117622-28812-8-git-send-email-kwolf@redhat.com> Patchwork-id: 57172 O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 07/37] block: Detect unaligned length in bdrv_qiov_is_aligned() Bugzilla: 748906 RH-Acked-by: Laszlo Ersek RH-Acked-by: Stefan Hajnoczi RH-Acked-by: Max Reitz For an O_DIRECT request to succeed, it's not only necessary that all base addresses in the qiov are aligned, but also that each length in it is aligned. Signed-off-by: Kevin Wolf Reviewed-by: Wenchao Xia Reviewed-by: Max Reitz (cherry picked from commit 1ff735bdc417945bc6df1857861b127644b3f461) Signed-off-by: Kevin Wolf --- block.c | 3 +++ 1 file changed, 3 insertions(+) --- block.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/block.c b/block.c index f62acbd..6c98ff7 100644 --- a/block.c +++ b/block.c @@ -4743,6 +4743,9 @@ bool bdrv_qiov_is_aligned(BlockDriverState *bs, QEMUIOVector *qiov) if ((uintptr_t) qiov->iov[i].iov_base % bs->buffer_alignment) { return false; } + if (qiov->iov[i].iov_len % bs->buffer_alignment) { + return false; + } } return true; -- 1.7.1