From: Kevin Wolf <kwolf@redhat.com>
To: Stefano Garzarella <sgarzare@redhat.com>
Cc: hreitz@redhat.com, qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [PATCH] file-posix: Fix alignment after reopen changing O_DIRECT
Date: Thu, 4 Nov 2021 15:47:42 +0100 [thread overview]
Message-ID: <YYPyjrSB3W+vUeZv@redhat.com> (raw)
In-Reply-To: <20211104142029.gcfgwrq4wuvzg5as@steredhat>
Am 04.11.2021 um 15:20 hat Stefano Garzarella geschrieben:
> On Thu, Nov 04, 2021 at 12:31:09PM +0100, 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 <kwolf@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(-)
> >
> > diff --git a/block/file-posix.c b/block/file-posix.c
> > index 7a27c83060..3f14e47096 100644
> > --- a/block/file-posix.c
> > +++ b/block/file-posix.c
> > @@ -167,6 +167,7 @@ typedef struct BDRVRawState {
> > int page_cache_inconsistent; /* errno from fdatasync failure */
> > bool has_fallocate;
> > bool needs_alignment;
> > + bool force_alignment;
> > bool drop_cache;
> > bool check_cache_dropped;
> > struct {
> > @@ -351,6 +352,17 @@ static bool dio_byte_aligned(int fd)
> > return false;
> > }
> >
> > +static int raw_needs_alignment(BlockDriverState *bs)
>
> If you need to respin, maybe it's better to use `bool` as return type.
Yes, that's what it should be. Can be fixed up while applying. I had a
0/1/-errno return value in an intermediate version, which is how it
became 'int', but it's not necessary any more in this version.
> In both cases:
> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Thanks!
Kevin
prev parent reply other threads:[~2021-11-04 14:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-04 11:31 [PATCH] file-posix: Fix alignment after reopen changing O_DIRECT Kevin Wolf
2021-11-04 13:32 ` Hanna Reitz
2021-11-04 14:20 ` Stefano Garzarella
2021-11-04 14:47 ` Kevin Wolf [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YYPyjrSB3W+vUeZv@redhat.com \
--to=kwolf@redhat.com \
--cc=hreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=sgarzare@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.