Question about power fail during file upgrade

David Woodhouse dwmw2 at infradead.org
Mon Sep 30 04:38:51 EDT 2002


ptroja at elproma.com.pl said:
> On Thu, Sep 26, 2002 at 09:45:23AM +0100, David Woodhouse wrote:
> > Kschoo70C at netscape.net said:
> > >     I need some help to understand how the JFFS2 works. If I have a
> > > version 1 of software component A on JFFS2, what happen if power
> > > failed while I am in the middle of upgrading the component A to
> > > version 2 ? The question is do I have version 1 intact or a
> > > combination of version 1 and 2 ?
> >
> > > Does the JFFS2 filesystem only set the inodes of a file to be valid
> > > only after a complete file is written to the flash ? Does the old
> > > file will only be deleted only after the new file is verified to be
> > > valid ?
> >
> > JFFS2 knows nothing of 'complete files'. You are guaranteed atomicity
> > of individual file system operations only, according to POSIX. 
> >
> > As with other file systems, you can write the new version of the file,
> > then rename it over the top of the original. That will be atomic.
> > 
> > There's been talk about extending JFFS2 to allow userspace
> > 'transactions' but it's not been done.

> so the only atomic change, that is guaranteed to work is renaming
> new.file -> old.file?

At the filesystem level, yes.

> if I need to make upgrade which depends on 10 files what should I do?
> how about put all filesystem in one .tar and put it in ramdisk at
> system startup, then make upgrade of .tar file, which is on JFFS2 DOC
> and reboot? will it work? 

There are plenty of options, one of which is to implement transation 
support in the file system so that your application can ensure that 
either all 10 of your renames happen or none of them.

I'm assuming you only really care about atomicity w.r.t power failure, and 
a moment where the files are absent is acceptable as long as they can be 
trivially recovered at boot time? You could unpack all the files into a 
directory -- '/usr/mypackage-v2', then make a symlink from /usr/mypackage 
to whichever version is current. If you boot and find no symlink, you check 
which is the most recent _intact_ version and symlink to that. Many 
variations on the theme are possible.


trivially be re

--
dwmw2






More information about the linux-mtd mailing list