Subject: Re: Is O_DIRECT useless on NetBSD?
To: Antti Kantee <pooka@cs.hut.fi>
From: Chuck Silvers <chuq@chuq.com>
List: tech-kern
Date: 12/17/2007 19:44:54
On Wed, Nov 21, 2007 at 04:39:13PM +0200, Antti Kantee wrote:
> On Wed Nov 21 2007 at 15:11:39 +0100, Roland Illig wrote:
> > >All the involved filesystems are ffs. So did I understand O_DIRECT
> > >wrong? Or is it at all impossible to disable the kernel cache for file
> > >data?
>
> I am assuming your archiver is extending the file. This does not work
> for O_DIRECT and it falls back to the buffered path. I am not sure
> if there is any real reason why it shouldn't be allowed, but at least
> currently the O_DIRECT code doesn't do block allocation. Maybe $ubcgod
> knows a deeper truth?
O_DIRECT is a no-op for allocating writes only because I didn't bother
to do the extra work to support it. at the time, I was interested in
database-style operation, ie. I/O to a pre-allocated file, so I didn't
need to worry about allocation. to add O_DIRECT support for allocation
probably wouldn't be all that hard, the only really interesting case
being correct integration with softdeps. freebsd handles this by
implementing O_DIRECT writes as buffered, but invalidating each buffer
instead of leaving it in the cache after it's on disk (or at least that's
what they did when I looked several years ago). a better implementation
would still do the writes as direct but create the necessary dependencies
to prevent the inode or indirect block from being written until the
direct I/O completes successfully.
-Chuck