From 14d98ef1b48ca7b2ea468a8f1ec967b954955a63 Mon Sep 17 00:00:00 2001 From: Jens Harbott Date: Thu, 8 Nov 2018 15:06:26 +0000 Subject: [PATCH] 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. Change-Id: I5151ae01e90506747860d9780547b0d4ce91d8bc Closes-Bug: 1801702 Co-Authored-By: Alexandre Arents --- nova/privsep/utils.py | 4 ++-- releasenotes/notes/bug-1801702-c8203d3d55007deb.yaml | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/bug-1801702-c8203d3d55007deb.yaml diff --git a/nova/privsep/utils.py b/nova/privsep/utils.py index 926599d5c923..6ba9c4c89773 100644 --- a/nova/privsep/utils.py +++ b/nova/privsep/utils.py @@ -43,8 +43,8 @@ def supports_direct_io(dirpath): 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) diff --git a/releasenotes/notes/bug-1801702-c8203d3d55007deb.yaml b/releasenotes/notes/bug-1801702-c8203d3d55007deb.yaml new file mode 100644 index 000000000000..67fa573c49b3 --- /dev/null +++ b/releasenotes/notes/bug-1801702-c8203d3d55007deb.yaml @@ -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.