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@xxxxxxxxxxxx> wrote: > > On Wed, Jan 08, 2014 at 11:10:09PM +0100, Miklos Szeredi wrote: > >> From: Miklos Szeredi <mszeredi@xxxxxxx> > >> > >> 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. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html