[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4A984758.5020008@redhat.com>
Date: Fri, 28 Aug 2009 14:08:40 -0700
From: Ulrich Drepper <drepper@...hat.com>
To: Jamie Lokier <jamie@...reable.org>
CC: Christoph Hellwig <hch@...radead.org>,
linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: adding proper O_SYNC/O_DSYNC, was Re: O_DIRECT and barriers
On 08/28/2009 09:44 AM, Jamie Lokier wrote:
> However, for userspace, there's an issue with applications which were
> compiled with an old libc and used O_SYNC. Most of them probably
> expected O_SYNC behaviour but all they got was O_DSYNC, because Linux
> didn't do it right.
Right. But these programs apparently can live with the broken
semantics. I don't worry too much about this. If people really need
the fixed O_SYNC semantics then let them recompile their code.
> When using a newer kernel which actually implements O_SYNC behaviour,
> I'm thinking those applications which asked for O_SYNC should get it,
> even though they're still linked with an old libc.
In general yes, but it's too expensive. Again, existing programs expect
the current behavior and can live with it.
> (Oh, and Ulrich: Why is there a "#define O_RSYNC O_SYNC" in the Glibc
> headers? That doesn't make sense: O_RSYNC has nothing to do with
> writing.)
O_SYNC is a superset of O_RSYNC. In the absence of a true O_RSYNC
that's the next best thing. Of course I didn't know the Linux O_SYNC is
really O_DSYNC. In that context the definition doesn't make sense.
> Although libc's __new_open() could have this:
>
> /* Old kernels only look at O_DSYNC. It's better than nothing. */
> if (flags& O_SYNC)
> flags |= O_DSYNC;
>
> Imho, it's better to not do that, and instead have
>
> #define O_SYNC (O_DSYNC|__O_SYNC_KERNEL)
Why should it be better? You're replacing something the compiler can do
with zero cost with active code.
Again, these O_* constant changes are sufficient.
--
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists