Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753013AbaAOS0r (ORCPT ); Wed, 15 Jan 2014 13:26:47 -0500 Received: from mail-vb0-f41.google.com ([209.85.212.41]:46568 "EHLO mail-vb0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752549AbaAOS0n (ORCPT ); Wed, 15 Jan 2014 13:26:43 -0500 MIME-Version: 1.0 In-Reply-To: <20140115181955.GA5715@fieldses.org> References: <1389219015-10980-1-git-send-email-miklos@szeredi.hu> <1389219015-10980-6-git-send-email-miklos@szeredi.hu> <20140115181955.GA5715@fieldses.org> From: Andy Lutomirski Date: Wed, 15 Jan 2014 10:26:23 -0800 Message-ID: Subject: Re: [PATCH 05/11] vfs: add RENAME_NOREPLACE flag To: "J. Bruce Fields" Cc: Miklos Szeredi , Al Viro , Linus Torvalds , Linux FS Devel , "linux-kernel@vger.kernel.org" , Christoph Hellwig , Andrew Morton , David Howells , Zach Brown , Jan Kara , "mszeredi@suse.cz" Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jan 15, 2014 at 10:19 AM, J. Bruce Fields wrote: > On Wed, Jan 08, 2014 at 11:10:09PM +0100, Miklos Szeredi wrote: >> From: Miklos Szeredi >> >> 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-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/