UBIFS question, atomic file create/rename semantics

Jon Povey Jon.Povey at racelogic.co.uk
Mon Apr 4 04:54:43 EDT 2011


I have a file I want to create on first-time boot on my system,
on UBIFS. It's done in a shell script, and the logic is something like

if [ ! -e $FILE ]
then
        # create the file
fi

Once or twice this file has turned out to be zero length (or possibly
contain nulls, I am working on slightly vauge reports).

Looking into the issues of sync and semantics, I think this is related
to not doing sync and rename.
The script was pretty much just saying "prog > $FILE" and no sync.

I came up with the following and would appreciate any comments about
how reliable this should be:

if [ ! -e $FILE ]
then
        prog > $FILE.tmp
        sync
        mv $FILE.tmp $FILE
        sync
fi

My understanding is that as the .tmp file is on the same filesystem
and I ran sync, the mv means the final file atomically either exists
with full correct contents, or will not exist at all (after surprise
power cycle during the process).

A quick "yes, fine" or "won't work" would be appreciated.

Thanks,

--
Jon Povey
jon.povey at racelogic.co.uk

Racelogic is a limited company registered in England. Registered number 2743719 .
Registered Office Unit 10, Swan Business Centre, Osier Way, Buckingham, Bucks, MK18 1TB .

The information contained in this electronic mail transmission is intended by Racelogic Ltd for the use of the named individual or entity to which it is directed and may contain information that is confidential or privileged. If you have received this electronic mail transmission in error, please delete it from your system without copying or forwarding it, and notify the sender of the error by reply email so that the sender's address records can be corrected. The views expressed by the sender of this communication do not necessarily represent those of Racelogic Ltd. Please note that Racelogic reserves the right to monitor e-mail communications passing through its network





More information about the linux-mtd mailing list