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 lengh in it
is aligned.

Signed-off-by: Kevin Wolf <kw...@redhat.com>
---
 block.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/block.c b/block.c
index 382ea71..613201b 100644
--- a/block.c
+++ b/block.c
@@ -4349,6 +4349,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.8.1.4


Reply via email to