Messages in this thread | | | Date | Wed, 15 Jan 2014 18:33:14 -0500 | From | "J. Bruce Fields" <> | Subject | Re: [PATCH 05/11] vfs: add RENAME_NOREPLACE flag |
| |
On Wed, Jan 15, 2014 at 10:26:23AM -0800, Andy Lutomirski wrote: > On Wed, Jan 15, 2014 at 10:19 AM, J. Bruce Fields <bfields@fieldses.org> wrote: > > On Wed, Jan 08, 2014 at 11:10:09PM +0100, Miklos Szeredi wrote: > >> From: Miklos Szeredi <mszeredi@suse.cz> > >> > >> If this flag is specified and the target of the rename exists then the > >> rename syscall fails with EEXIST. > > > > Why is this useful? > > The trivial answer: to eliminate the race condition from 'mv -i'. > > Another answer: there's a common pattern to atomically create a file > with contents: open a temporary file, write to it, optionally fsync > it, close it, then link(2) it to the final name, then unlink the > temporary file. > > The reason to use link(2) is because it won't silently clobber the destination. > > This is annoying: > - It requires an extra system call that shouldn't be necessary. > - It doesn't work on (IMO sensible) filesystems that don't support > hard links (e.g. vfat). > - It's not atomic -- there's an intermediate state where both files exist. > - It's ugly. > > The new rename flag will make this totally sensible.
Makes sense, thanks! Could that just get cut-n-pasted into the changelog? (Unless there's some obvious other place to put it.)
--b.
> > To be fair, on new enough kernels, you can also use O_TMPFILE and > linkat to achieve the same thing even more cleanly.
| |