Make supports_direct_io work on 4096b sector size

The current check uses an alignment of 512 bytes and will fail when the
underlying device has sectors of size 4096 bytes, as is common e.g. for
NVMe disks. So use an alignment of 4096 bytes, which is a multiple of
512 bytes and thus will cover both cases.

Conflicts:
        nova/privsep/utils.py
        - supports_direct_io() is still in
          nova/virt/libvirt/driver.py for this branch

Change-Id: I5151ae01e90506747860d9780547b0d4ce91d8bc
Closes-Bug: 1801702
Co-Authored-By: Alexandre Arents <alexandre.arents@corp.ovh.com>
(cherry picked from commit 14d98ef1b4)
(cherry picked from commit ba844f2a7c)
This commit is contained in:
Jens Harbott 2018-11-08 15:06:26 +00:00 committed by Elod Illes
parent 8c663dbd25
commit c77c3eb61c
2 changed files with 10 additions and 2 deletions

View File

@ -2972,8 +2972,8 @@ class LibvirtDriver(driver.ComputeDriver):
fd = None
try:
fd = os.open(testfile, os.O_CREAT | os.O_WRONLY | os.O_DIRECT)
# Check is the write allowed with 512 byte alignment
align_size = 512
# Check is the write allowed with 4096 byte alignment
align_size = 4096
m = mmap.mmap(-1, align_size)
m.write(b"x" * align_size)
os.write(fd, m)

View File

@ -0,0 +1,8 @@
---
fixes:
- |
When testing whether direct IO is possible on the backing storage
for an instance, Nova now uses a block size of 4096 bytes instead
of 512 bytes, avoiding issues when the underlying block device has
sectors larger than 512 bytes. See bug
https://launchpad.net/bugs/1801702 for details.