[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] 9pfs: don't ignore O_DIRECT flag in the 9pfs se
From: |
Greg Kurz |
Subject: |
Re: [Qemu-devel] [PATCH] 9pfs: don't ignore O_DIRECT flag in the 9pfs server |
Date: |
Mon, 20 Nov 2017 11:13:03 +0100 |
On Mon, 20 Nov 2017 13:48:59 +0800
jiangyiwen <address@hidden> wrote:
> Now v9fs in linux has already supported O_DIRECT(v9fs_direct_IO),
> when guest user open file with O_DIRECT flag and return success,
> so user hopes data doesn't pass through page cache, but 9pfs in
> qemu ignore direct disk access and use host page cache, it is not
> match to DIRECT_IO semantic, so we should not ignore O_DIRECT in
> 9pfs unless v9fs in linux don't support DIRECT_IO.
>
> And if server fs don't support O_DIRECT, user will receive -EINVAL
> and know the filesystem don't support O_DIRECT.
>
> So in order to ensure semantic consistency, don't ignore direct
> disk access in 9pfs.
>
There are good reasons for us to ignore O_DIRECT. AFAIK, O_DIRECT requires
the application to take care of the alignment of the buffers with either the
logical block size of the filesystem (linux <= 2.4) or the logical block size
of the underlying storage... I don't really see how you can achieve that since
the linux 9p client only cares to break up requests into msize-chunks, and
ignores alignment. ie, you're likely to not ensure semantic consistency on the
host side anyway and linux will fallback to cached I/O.
Also, this change would silently break existing users of O_DIRECT, which isn't
acceptable... it would require some fsdev property to enable this new behavior.
> Signed-off-by: Yiwen Jiang <address@hidden>
> ---
> hw/9pfs/9p.c | 4 ----
> 1 file changed, 4 deletions(-)
>
> diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
> index 52d4663..5ea01c4 100644
> --- a/hw/9pfs/9p.c
> +++ b/hw/9pfs/9p.c
> @@ -155,10 +155,6 @@ static int get_dotl_openflags(V9fsState *s, int oflags)
> */
> flags = dotl_to_open_flags(oflags);
> flags &= ~(O_NOCTTY | O_ASYNC | O_CREAT);
> - /*
> - * Ignore direct disk access hint until the server supports it.
> - */
> - flags &= ~O_DIRECT;
> return flags;
> }
>