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

Martin Egholm Nielsen martin at egholm-nielsen.dk
Mon Jul 25 08:51:22 BST 2005


Hi again,

I know I'm making a lot of noise, but has the below fix been implemented 
in YAFFS' HEAD?

// 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.




More information about the yaffs mailing list