UBIFS question, atomic file create/rename semantics

Artem Bityutskiy dedekind1 at gmail.com
Mon Apr 4 04:59:24 EDT 2011


Hi,

On Mon, 2011-04-04 at 09:54 +0100, Jon Povey wrote:
> 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.

It does not mean you should trust me and not test that, but I think
"yes", your sequence should make it.

-- 
Best Regards,
Artem Bityutskiy (Артём Битюцкий)




More information about the linux-mtd mailing list