• Artem Bityutskiy's avatar
    UBIFS: expect corruption only in last journal head LEBs · 91c66083
    Artem Bityutskiy authored
    This patch improves UBIFS recovery and teaches it to expect corruption only
    in the last buds. Indeed, currently we just recover all buds, which is
    incorrect because only the last buds can have corruptions in case of a power
    cut. So it is inconsistent with the rest of the recovery strategy which tries
    hard to distinguish between corruptions cause by power cuts and other types of
    corruptions.
    
    This patch also adds one quirk - a bit older UBIFS was could have corruption in
    the next to last bud because of the way it switched buds: when bud A is full,
    it first searched for the next bud B, the wrote a reference node to the log
    about B, and then synchronized the write-buffer of A. So we could end up with
    buds A and B, where B is the last, but A had corruption. The UBIFS behavior
    was fixed, though, so currently it always first synchronizes A's write-buffer
    and only after this adds B to the log. However, to be make sure that we handle
    unclean (after a power cut) UBIFS images belonging to older UBIFS - we need to
    add a quirk and keep it for some time: we need to check for the situation
    described above.
    
    Thankfully, it is easy to check for that situation. When UBIFS adds B to the
    log, it always first unmaps B, then maps it, and then syncs A's write-buffer.
    Thus, in that situation we can check that B is empty, in which case it is OK to
    have corruption in A. To check that B is empty it is enough to just read the
    first few bytes of the bud and compare them with 0xFFs. This quirk may be
    removed in a couple of years.
    Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
    91c66083
replay.c 29.2 KB