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. To be fair, on new enough kernels, you can also use O_TMPFILE and linkat to achieve the same thing even more cleanly. --Andy -- 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