Re: [Yaffs] Re: power fail testing -->rename problem

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Charles Manning
Date:  
To: yaffs
Subject: Re: [Yaffs] Re: power fail testing -->rename problem
On Monday 25 July 2005 19:51, Martin Egholm Nielsen wrote:
> Hi again,
>
> I know I'm making a lot of noise, but has the below fix been implemented
> in YAFFS' HEAD?


This is not yet fixed.

I hope to do something about this during this week.

I have though about it more and the "shadowing" method is still the best,
IMHO.


>
> // Martin
>
> > I have investigated this and figured out a fix which I will code and test
> > in the next few days.
> >
> > I considered a few approaches, but the mechanism I have settled on uses a
> > "shadowing" field.
> >
> > The code went like this:
> >
> >    if (newname exists)
> >    {
> >        unlink(newname);
> >    }
> >    rename(oldname,newname)

> >
> > The problem Sergei discovered was that the power could be lost between
> > the unlink and the rename, causing the file system to end up with no file
> > called newname.
> >
> > We cannot just reverse the order because that could leave us with two
> > names for different files -- bad!
> >
> > The new code will go like this
> >
> >    if (newname exists)
> >    {
> >        rename_with_shadow(oldname,newname);
> >         // Point A
> >        unlink(newname);
> >        // Point B
> >    }
> >    rename(oldname,newname)

> >
> > A shadowing rename is like its non-shadowing brother except that it also
> > stores the object Id of the object that it "shadows". The semantics of
> > scanning a shadowing objectheader are different. If the shadowed object
> > exists (ie power lost at point A) then we unlink it.
> >
> > Essentially the shadowing gives us a way of determining priority between
> > two like-named objects.
> >
> > Why do we rename without the shadow afterwards? This is done so that we
> > remove the shadow after it is no longer needed. If this was not done we
> > would potentially have a shadow hanging around that would cause future
> > files with the same object Id to get deleted.