From: Jakub Jelinek <jakub@redhat.com>
To: Ulrich Drepper <drepper@redhat.com>
Cc: Jim Meyering <meyering@gmail.com>,
Jeff Garzik <jgarzik@pobox.com>,
linux-kernel@vger.kernel.org, akpm@osdl.org, torvalds@osdl.org
Subject: Re: [PATCH 0/3] *at syscalls: Intro
Date: Fri, 16 Dec 2005 11:36:18 -0500 [thread overview]
Message-ID: <20051216163618.GB6378@devserv.devel.redhat.com> (raw)
In-Reply-To: <43A2EA55.9070602@redhat.com>
On Fri, Dec 16, 2005 at 08:24:53AM -0800, Ulrich Drepper wrote:
> Jim Meyering wrote:
> >FYI, the rm in coreutils-cvs is finally thread-safe and race-free,
> >when using openat et al.
>
> Actually, Jim, I doubt it. There is one more race which cannot be
> solved with the existing interfaces. I want to tackle this next, after
> these changes are decided on.
>
> The problem is directory creation and then populating it. As in cp -r
> and any backup tool. You currently have to use (at best)
>
> mkdirat(fd, "some-dir", 0666);
> dfd = openat(fd, "some-dir", O_RDONLY);
>
> What is needed is a way to create a new directory and return a file
> descriptor for it.
>
> I was thinking about using
>
> dfd = openat(fd, "some-dir", O_RDONLY|O_DIRECTORY|O_CREAT, S_IFDIR|0666)
>
> where the combination of using O_DIRECTORY, O_RDONLY, O_CREAT, and the
> S_IFDIR flag can be recognized. This is a configuration which cannot be
> used successfully in current code. Should probably also work with open().
At least for prelink I'd also like to be able to atomically
read/modify/write a file, but the Solaris renameat doesn't allow that.
What I do is open the original file, read it etc., then create a temporary
file in the same dir and as the final step I need to rename it over
the original file, but I'd like to do that only if nobody replaced
the original file in the mean time.
So a renameat variant that would have
olddirfd, oldname, oldfd, newdirfd, newname, newfd
arguments would be handy. It would do the same thing as
renameat (olddirfd, oldname, newdirfd, newname),
but would fail if oldfd resp. newfd no longer corresponds to
the olddirfd/oldname resp. newdirfd/newname files.
Jakub
next prev parent reply other threads:[~2005-12-16 16:36 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-12-15 22:49 [PATCH 0/3] *at syscalls: Intro Ulrich Drepper
2005-12-16 0:32 ` Jeff Garzik
2005-12-16 1:29 ` Ulrich Drepper
2005-12-16 1:39 ` Jeff Garzik
2005-12-16 11:32 ` Jim Meyering
2005-12-16 16:24 ` Ulrich Drepper
2005-12-16 16:36 ` Jakub Jelinek [this message]
2005-12-16 19:59 ` Jim Meyering
2005-12-16 1:13 ` Nicholas Miell
2005-12-16 17:51 ` Linus Torvalds
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=20051216163618.GB6378@devserv.devel.redhat.com \
--to=jakub@redhat.com \
--cc=akpm@osdl.org \
--cc=drepper@redhat.com \
--cc=jgarzik@pobox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=meyering@gmail.com \
--cc=torvalds@osdl.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox