2010-11-25 20:13:19

by Frank Kingswood

[permalink] [raw]
Subject: atomically swap two files

Hi!

Is it possible to swap two files in an atomic way, so that after the
syscall either the two files have exchanged names or neither has been
modified?

I suspect that btrfs could do it, but I'm wondering about ext3/4.

Frank


2010-11-26 11:49:18

by Pádraig Brady

[permalink] [raw]
Subject: Re: atomically swap two files

On 25/11/10 20:11, Frank A. Kingswood wrote:
> Hi!
>
> Is it possible to swap two files in an atomic way, so that after the
> syscall either the two files have exchanged names or neither has been
> modified?
>
> I suspect that btrfs could do it, but I'm wondering about ext3/4.

I don't think there is anything equivalent to exchangedata() on Linux
http://developer.apple.com/library/mac/#DOCUMENTATION/Darwin/Reference/ManPages/man2/exchangedata.2.html

I've written some notes on atomically replacing
file contents with standard tools here:
http://www.pixelbeat.org/docs/unix_file_replacement.html

cheers,
P?draig.

2010-11-26 14:19:18

by Dave Chinner

[permalink] [raw]
Subject: Re: atomically swap two files

On Fri, Nov 26, 2010 at 11:47:52AM +0000, P?draig Brady wrote:
> On 25/11/10 20:11, Frank A. Kingswood wrote:
> > Hi!
> >
> > Is it possible to swap two files in an atomic way, so that after the
> > syscall either the two files have exchanged names or neither has been
> > modified?
> >
> > I suspect that btrfs could do it, but I'm wondering about ext3/4.
>
> I don't think there is anything equivalent to exchangedata() on Linux
> http://developer.apple.com/library/mac/#DOCUMENTATION/Darwin/Reference/ManPages/man2/exchangedata.2.html

XFS can do that, though the interface is an ioctl (XFS_IOC_SWAPEXT)
whose parameters are closely tied to the functionality of the only
user: the online defragmenter (xfs_fsr). It would be pretty easy to
wire it up to such a syscall if one existed, though....

Cheers,

Dave.
--
Dave Chinner
[email protected]