On 04.11.21 12:31, Kevin Wolf wrote:
At the end of a reopen, we already call bdrv_refresh_limits(), which
should update bs->request_alignment according to the new file
descriptor. However, raw_probe_alignment() relies on s->needs_alignment
and just uses 1 if it isn't set. We neglected to update this field, so
starting with cache=writeback and then reopening with cache=none means
that we get an incorrect bs->request_alignment == 1 and unaligned
requests fail instead of being automatically aligned.
Fix this by recalculating s->needs_alignment in raw_refresh_limits()
before calling raw_probe_alignment().
Signed-off-by: Kevin Wolf <kw...@redhat.com>
---
block/file-posix.c | 20 ++++++++++++++++----
tests/qemu-iotests/142 | 22 ++++++++++++++++++++++
tests/qemu-iotests/142.out | 15 +++++++++++++++
3 files changed, 53 insertions(+), 4 deletions(-)
Reviewed-by: Hanna Reitz <hre...@redhat.com>