Message ID | 20190806104316.29328-1-nsoffer@redhat.com |
---|---|
State | New |
Headers | show |
Series | block: file-posix: Fix alignment probing on glsuter | expand |
diff --git a/block/file-posix.c b/block/file-posix.c index 4479cc7ab4..d29b9e5229 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -1122,7 +1122,7 @@ static void raw_refresh_limits(BlockDriverState *bs, Error **errp) } raw_probe_alignment(bs, s->fd, errp); - bs->bl.min_mem_alignment = s->buf_align; + bs->bl.min_mem_alignment = MAX(s->buf_align, bs->bl.request_alignment); bs->bl.opt_mem_alignment = MAX(s->buf_align, getpagesize()); }
On Gluster storage with sector size of 4096 bytes, buf_align may be wrong; reading 4096 bytes into unaligned buffer succeeds. This probably happens because the actual read happens on the Gluster node with aligned buffer, and Gluster client does not enforce any alignment on the host. However request_alignment is always right, since the same size is use on the Gluster node to perform the actual I/O. Use the maximum value for setting min_mem_alignment. With this change we can provision a virtual machine with Gluster storage using VDO device and fuse mount. This is a partial fix for https://bugzilla.redhat.com/1737256. To make this work, the management system must ensure that the first block of the image is allocated, for example: qemu-img create -f raw test.img 1g dd if=/dev/zero bs=4096 count=1 of=test.img conv=nortunc Signed-off-by: Nir Soffer <nsoffer@redhat.com> --- block/file-posix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)