[PATCH] UBIFS: fix master node recovery

Artem Bityutskiy dedekind1 at gmail.com
Thu Jul 7 04:57:04 EDT 2011


On Thu, 2011-07-07 at 10:44 +0200, Anatolij Gustschin wrote:
> On Thu, 07 Jul 2011 10:57:05 +0300
> Artem Bityutskiy <dedekind1 at gmail.com> wrote:
> 
> > On Thu, 2011-07-07 at 09:43 +0200, Anatolij Gustschin wrote:
> > > Yes, in our case we have 511 valid master nodes + 384 bytes free
> > > space in LEB 2 and one valid master node in LEB 1 + free space.
> > > 
> > > > What we want to check is that there is no room for another master node
> > > > in the second LEB. We have to take offs2, add sz, and make sure that LEB
> > > > size minus that is less than sz, i.e., exactly what you have done.
> > > > 
> > > > And  offs2 + sz >= c->leb_size seems to be completely incorrect and
> > > > should be removed, AFAICS. Can you confirm that?
> > > 
> > > Yes, offs2 + sz >= c->leb_size check is not correct, I think.
> > 
> > I also think so. Could you send v2 of your patch - kill the incorrect
> > check and add your correct check instead.
> 
> Thinking more about this I can imagine the situation where
> off2 + sz == c->leb_size condition is true (depending on LEB size,
> node alignment, etc.), so we should check for this condition also.
> off2 + sz > c->leb_size can't be the case since off2 is the offset
> of a valid node. So we should check for
> off2 + sz == c->leb_size || (c->leb_size - offs2 - sz) < sz.

If offs2 + sz == c->leb_size, then we end up with

0 < sz, which will be true, and everything should be fine, no?

-- 
Best Regards,
Artem Bityutskiy




More information about the linux-mtd mailing list