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>


Reply via email to