On Mon, 20 Nov 2017 13:48:59 +0800 jiangyiwen <jiangyi...@huawei.com> 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 <jiangyi...@huawei.com> > --- > 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; > } >